0

可能重复:
反序列化 List<ArrayList> 对象

我真的很难将以下 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),但我也遇到了与原始海报相同的问题。

我可以创建一个对象,其中包含所有链接的组合列表,但我想保持有 2 个“文档”元素的事实,并为两者保持链接分开。

到目前为止我的代码;

    [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 个“文档”元素?

谢谢

4

1 回答 1

1

据我所知,您有一个文档集列表,其中包含一个文档列表和一个链接列表。然后你错过了类 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 时,您将拥有一个文档列表,并且每个文档对象都有自己的链接。

编辑:
显然它是一个带有文档列表和链接列表的文档集元素。

于 2012-04-13T10:46:37.323 回答