[英]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.