簡體   English   中英

C#將XML反序列化為具有同級節點的數組

[英]C# Deserialization of XML into Array With Sibling Nodes

在一個我正在從事的項目中,我獲得了無法控制的XML。 我需要提取節點數組以及作為數組同級的單個屬性。 (請參見下面的示例XML)

<pagination>
    <total-pages>1</total-pages>
    <page position="first">?i=1;q=gloves</page>
    <page position="last">?i=1;q=gloves</page>
    <page position="1" selected="true">?i=1;q=gloves</page>      
</pagination>

在上面的示例中,我需要將total-pages節點作為一個int並創建一個頁面節點數組。 我有反序列化器工作的基礎知識,我只需要知道如何設置我的類以允許我提取數組和int即可。 如果我在主班做以下事情:

[XmlArray("pagination")]
[XmlArrayItem("page", typeof(ResultsPage))]
public ResultsPage[] Pages { get; set; }
[XmlElement(ElementName = "total-pages")]
public int TotalPages { get; set; }

我得到了頁面節點的數組,但是TotalPages是0而不是1。我也在主類中嘗試了以下方法:

[XmlElement(ElementName = "pagination")]
public Pagination Pagination { get; set; }

有一個子類

public class Pagination
{
    [XmlArray]
    [XmlArrayItem("page", typeof(ResultsPage))]
    public ResultsPage[] Pages { get; set; }
    [XmlElement(ElementName = "total-pages")]
    public int TotalPages { get; set; }
}

在這種情況下,TotalPages正確設置為1,但是Pages數組為null。

有沒有辦法做到這一點?

這應該工作

public class Pagination
{
    [XmlElement("page")]
    public List<ResultsPage> Pages { get; set; }
    [XmlElement("total-pages")]
    public int TotalPages { get; set; }
}

public class ResultsPage
{
    [XmlAttribute("position")]
    public string Position;

    [XmlText]
    public string Text;
}

如果您具有要展平的容器元素,則僅需要使用XmlArray和XmlArrayItem屬性。

<pagination>
    <total-pages>1</total-pages>
    <pages>
        <page position="first">?i=1;q=gloves</page>
        <page position="last">?i=1;q=gloves</page>
        <page position="1" selected="true">?i=1;q=gloves</page>      
    </pages>
</pagination>

然后你會寫

public class Pagination
{
    [XmlArray("pages"), XmlArrayItem("page")]
    public List<ResultsPage> Pages { get; set; }
    [XmlElement("total-pages")]
    public int TotalPages { get; set; }
}

暫無
暫無

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

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