我真的很难将以下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”元素包含自己的链接而不是一个链接组合列表的任何想法?
由于
答案 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元素,带有一个带有链接列表的文档列表。