2011-10-26 48 views
1

在我正在处理的一个项目中,我被给了XML来处理,我无法控制。我需要拉出一个节点数组以及一个属于数组的兄弟的单数属性。 (参见下面的示例XML)C#反序列化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> 

在上面的例子我需要拉出总页数节点作为int和创建该页面节点的数组。我有解串器工作的基础知识,我只需要知道如何设置我的类以允许我拉出数组和int。如果我做我的主类以下几点:

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

我得到的页面节点的数组,但总页数为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; } 
} 

在总页数被正确地设置为1这种情况下,但页阵列为空。

有没有办法做到这一点?

+0

http://stackoverflow.com/questions/364253/how-to-deserialize-xml-document/364401#364401 –

+0

谢谢你的评论,但正如我所说我理解反序列化的基本概念,只是问是否可能。 –

回答

0

这应该工作

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; } 
} 
+0

此解决方案工作。谢谢。 –

+0

@CynergyDigital,但它改变了你的XML,就像我在我的示例中建议的那样。这种变化与我的略有不同,但它是一种变化!在你对我的解决方案的评论中,你说过,你对xml没有影响,因为它来自第三方... – Fischermaen

+0

@Fischermaen不,我低估了你的答案,因为它是错误的。我的答案中的XML与解决方案无关。这只是一个例子来说明他需要使用XmlArray属性的情况。 –