使用C#反序列化以下XML的正确方法是什么?
<?xml version='1.0' encoding='UTF-8'?>
<feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:gCal='http://schemas.google.com/gCal/2005'>
<id>http://www.google.com/cal...</id>
<subtitle type='text'>RockPointe Events (1)</subtitle>
<entry>
<id>http://www.google.com/cal...</id>
<published>2011-07-07T21:43:44.000Z</published>
<updated>2011-07-07T21:48:31.000Z</updated>
<title type='html'>Event 1</title>
<summary type='html'>Event 1 Summary</summary>
<content type='html'>Event 1 Content</content>
</entry>
<entry>
<id>http://www.google.com/cal...</id>
<published>2011-07-07T21:43:44.000Z</published>
<updated>2011-07-07T21:48:31.000Z</updated>
<title type='html'>Event 2</title>
<summary type='html'>Event 2 Summary</summary>
<content type='html'>Event 2 Content</content>
</entry>
</feed>
这是我目前的POCO
[XmlRoot(ElementName = "feed", Namespace = "http://www.w3.org/2005/Atom")]
public class Feed
{
[XmlElement("subtitle")]
public string Subtitle { get; set; }
[XmlElement("title")]
public string Title { get; set; }
[XmlElement("entry")]
public m_Entry[] Entry { get; set; }
[XmlType(Namespace = "")]
public class m_Entry
{
[XmlElement("title")]
public string Title { get; set; }
[XmlElement("summary")]
public string Summary { get; set; }
[XmlElement("content")]
public string Content { get; set; }
[XmlElement("published")]
public DateTime Published { get; set; }
[XmlElement("updated")]
public DateTime Updated { get; set; }
}
}
当我通过Deserialize
方法运行时,我会按预期获得Title
和Subtitle
。问题出在entry
上。我得到两个条目,但一切都是空的。
答案 0 :(得分:2)
好吧,它似乎就像从Entry Class中删除XmlType
属性一样简单
[XmlRoot(ElementName = "feed", Namespace = "http://www.w3.org/2005/Atom")]
public class Feed
{
[XmlElement("subtitle")]
public string Subtitle { get; set; }
[XmlElement("title")]
public string Title { get; set; }
[XmlElement("entry")]
public Entry[] Entries { get; set; }
public class Entry
{
[XmlElement("title")]
public string Title { get; set; }
[XmlElement("summary")]
public string Summary { get; set; }
[XmlElement("content")]
public string Content { get; set; }
[XmlElement("published")]
public DateTime Published { get; set; }
[XmlElement("updated")]
public DateTime Updated { get; set; }
}
}
答案 1 :(得分:0)
我注意到的一件事是你将entry
数组反序列化为单个元素而不是数组。也许您应该考虑将装饰器更改为以下内容:
[XmlArray("feed")]
[XmlArrayItem("entry", typeof(m_Entry))]
public m_Entry[] entry { get; set; }