无法使用解包的集合反序列化XML

时间:2012-03-08 19:55:27

标签: c# xml-deserialization

使用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方法运行时,我会按预期获得TitleSubtitle。问题出在entry上。我得到两个条目,但一切都是空的。

null entry

2 个答案:

答案 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; }