簡體   English   中英

反序列化這個 XML 文件並獲取數據

[英]Deserialize this XML File and getting data

我有這個 XML 文件:

<readyGrid>
<gridRows>
<gridRow id="0">
<gridCol id="1">N.Doc.</gridCol>
<gridCol id="2">N.Doc. solo numero</gridCol>
<gridCol id="3">Data</gridCol>
<gridCol id="4">Intestatario</gridCol>
<gridCol id="5">Causale</gridCol>
<gridCol id="6">Stato</gridCol>
<gridCol id="7">Tot.doc.</gridCol>
<gridCol id="8">Data</gridCol>
<gridCol id="9">Peso</gridCol>
<gridCol id="10">Contrassegno</gridCol>
<gridCol id="11">Porto</gridCol>
<gridCol id="12">CAP</gridCol>
<gridCol id="13">Destinazione</gridCol>
<gridCol id="14">Indirizzo</gridCol>
<gridCol id="15">Citta'</gridCol>
<gridCol id="16">Provincia</gridCol>
<gridCol id="17">Colli</gridCol>
<gridCol id="18">Email</gridCol>
<gridCol id="19">Servizio</gridCol>
<gridCol id="20">Pagamento</gridCol>
<gridCol id="21">Fermo deposito</gridCol>
<gridCol id="22">Telefono destinatario</gridCol>
<gridCol id="23">Cellulare intestatario</gridCol>
</gridRow>
<gridRow id="1">
<gridCol id="1">any</gridCol>
<gridCol id="2">any</gridCol>
<gridCol id="3">any</gridCol>
<gridCol id="4">any</gridCol>
<gridCol id="5">any</gridCol>
<gridCol id="6">any</gridCol>
<gridCol id="7">any</gridCol>
<gridCol id="8">any</gridCol>
<gridCol id="9">any</gridCol>
<gridCol id="10">any</gridCol>
<gridCol id="11">any</gridCol>
<gridCol id="12">any</gridCol>
<gridCol id="13">any</gridCol>
<gridCol id="14">any</gridCol>
<gridCol id="15">any</gridCol>
<gridCol id="16">any</gridCol>
<gridCol id="18">any</gridCol>
<gridCol id="19">any</gridCol>
<gridCol id="20">any</gridCol>
<gridCol id="22">any</gridCol>
</gridRow>
</gridRows>
</readyGrid>

它是一個動態文件,其中可以有許多 gridRow,都在標簽內。

:其中 id 為 0,表示 header 列,並從 id="1" 列出所有數據。

我需要在類中反序列化 this.XML 文件。 這是我目前所擁有的:

[XmlRoot(Namespace = "", ElementName = "readyGrid")]
public class Root
{
    [XmlElement("gridRows")]
    public List<GridRows> GridRows { get; set; }
}

public class GridRows
{
    [XmlElement("gridRow")]
    public List <GridRow> GridRow { get; set; }
}

public class GridRow
{
    [XmlAttribute("id")]
    public int Id { get; set; } 
    [XmlAttribute("gridCol")]
    public List<GridCol> GridCol { get; set; }
}

public class GridCol
{
    [XmlAttribute("id")]
    public int idColumn { get; set; }
    public string Content { get; set; }
}

以及應該反序列化並放入類的代碼:

XmlSerializer serializer = new XmlSerializer(typeof(Root));
var reader = new StreamReader(uploadFilePath);
List<GridRows> results = ((Root)serializer.Deserialize(reader)).GridRows;

但是最后一個代碼示例不起作用,在第一行崩潰。 (System.InvalidOperationException,反射錯誤..)

我想知道是否有一種最簡單的方法可以在類中反序列化這個 XML 文件,或者我必須在代碼中進行哪些更改才能使其正常工作。 重要的是我采用了 id="" 和標簽之間的內容。

最簡單的方法當然仍然是 .NET SDK 附帶的 xsd.exe。 在開發人員命令提示符下,您可以將其稱為

xsd <Path to your example XML file> /classes

它將為您生成類似於 XML 文件結構的類。 作為替代方案,它還可以為您生成模式,並且您可以通過多種選項來調整代碼生成,例如通過提供命名空間。 只需在沒有任何 arguments 的情況下調用 xsd.exe,它就會為您提供如何使用它的說明。

在對您的課程進行一些小的修改后使其工作

XmlRoot("readyGrid")]
public class Root
{
    [XmlElement("gridRows")]
    public List<GridRows> GridRows { get; set; }
}

public class GridRows
{
    [XmlElement("gridRow")]
    public List<GridRow> GridRow { get; set; }
}

public class GridRow
{
    [XmlAttribute("id")]
    public int Id { get; set; }

    [XmlElement("gridCol")]
    public List<GridCol> GridCol { get; set; }
}

public class GridCol
{
    [XmlAttribute("id")]
    public int idColumn { get; set; }

    [XmlText]
    public string Content { get; set; }
}

用法

XmlSerializer serializer = new XmlSerializer(typeof(Root));
using (var reader = new StreamReader(xmlFilePath))
{
    var root = ((Root)serializer.Deserialize(reader));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM