【问题标题】:Can I deserialize an XML element which is an array of arrays in C#? [duplicate]我可以反序列化一个 XML 元素,它是 C# 中的数组数组吗? [复制]
【发布时间】:2012-04-13 23:29:39
【问题描述】:

可能重复:
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),但我也遇到了与原始发帖人相同的问题。

我可以创建一个对象,其中包含所有链接的组合列表,但我想保持有 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 个“文档”元素?

谢谢

【问题讨论】:

    标签: c# xml deserialization


    【解决方案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 时,您将拥有一个文档列表,并且每个文档对象都有自己的链接。

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

    【讨论】:

    • 抱歉,XML 命名令人困惑。有一个“文档集”,其中包含“文档”列表。反过来,如果“链接”,“文档”包含一个列表。
    • @Robbie :我猜 Sani 的答案也适用于 DocSets 类型为 DocSet 而不是 List
    • 正如@jbl 所说,只需将类型更改为 DocSet 而不是 List 就可以了。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2012-04-10
    • 1970-01-01
    • 2015-04-25
    • 1970-01-01
    相关资源
    最近更新 更多