如何将xml反序列化为List <t> </t>

时间:2013-12-13 09:16:01

标签: c# xml

我有某种类型的对象,让我们说Foo,看起来像:

public class Foo
{
    [XmlElement("id")]
    public string Id {get; set;}

    [XmlElement("name")]
    public string Name {get; set;}
}

我也有xml:

<root>
    <foo>
        <id>1</id>
        <name>name_1</name>
    </foo>
    <foo>
        <id>2</id>
        <name>name_2</name>
    </foo>
</root>

使用XmlDeserializer使用以下代码尝试将该xml反序列化为List时,我做错了什么?

var list = new List<Foo>();
var serializer = new XmlSerializer(typeof(List<Foo>));
using (var reader = new StringReader(xml))
{
    list = (List<Foo>)serializer.Deserialize(reader); //error here
}

获得例外:

System.InvalidOperationException

<root xmlns=''> unexprected .

1 个答案:

答案 0 :(得分:3)

根元素不匹配。有办法将它传递给XmlSerializer的构造函数,但IMO最好的办法是创建一个包装类:

[XmlRoot("root")]
public class FooWrapper {
    [XmlElement("foo")]
    public List<Foo> Items {get;set;}
}

并将此类型传递给XmlSerializer。