我可以反序列化一个XML元素,它是C#中的数组数组吗?

时间:2012-04-13 10:22:49

标签: c# xml deserialization

  

可能重复:
  Deserialize List<ArrayList> object

我真的很难将以下XML反序列化为C#对象;

<docRoot>
  ...
  <doc-sets>
     <docs>
      <atom:link rel="related" href="http://blah.com/1" title="abc" xmlns:atom="http://www.w3.org/2005/Atom" />
      <atom:link rel="related" href="http://blah.com/2" title="abc2" xmlns:atom="http://www.w3.org/2005/Atom" />
     </docs>
     <docs>
      <atom:link rel="related" href="http://blah.com/1" title="abc" xmlns:atom="http://www.w3.org/2005/Atom" />
      <atom:link rel="related" href="http://blah.com/2" title="abc2" xmlns:atom="http://www.w3.org/2005/Atom" />
     </docs>
    ....
  </doc-sets>
</docRoot

我找到了一个非常相似的问题(Deserialize List<ArrayList> object),但我也遇到了与原始海报相同的问题。

我可以创建一个包含所有链接组合列表的对象,但我想保留这样一个事实,即有两个“docs”元素,并保持两个链接分开。

到目前为止我的代码;

    [XmlRoot("docRoot")]
public class DocRoot
{
    [XmlElement("doc-sets")]
    public List<Docs> DocSets;
}
public class Link
{
    [XmlAttribute("href")]
    public string Href;        
}
public class Docs
{
    [XmlArray("docs")]
    [XmlArrayItem("link", typeof(Link), Form = XmlSchemaForm.Qualified, Namespace = "http://www.w3.org/2005/Atom")]
    public List<Link> Links;

    public Docs()
    {
        Links = new List<Link>();
    }
}

我是如何保留2个“Doc”元素包含自己的链接而不是一个链接组合列表的任何想法?

由于

1 个答案:

答案 0 :(得分:1)

据我所知,你有一份doc-sets列表,其中包含一个带有链接列表的文档列表。那你就错过了DocSet课程:

[XmlRoot("docRoot")]
public class DocRoot
{
  [XmlElement("doc-sets")]
  public DocSet DocSets;
}

public class DocSet
{
  [XmlElement("docs")]
  public List<Doc> Docs;
}

public class Doc
{
  [XmlElement("link", Form = XmlSchemaForm.Qualified, Namespace = "http://www.w3.org/2005/Atom")]
  public List<Link> Links;
}

public class Link
{
  [XmlAttribute("href")]
  public string Href;        
}

现在,当反序列化XML时,您将拥有一个文档列表,每个文档对象都有自己的链接。

修改
显然它是一个doc-sets元素,带有一个带有链接列表的文档列表。