如何在指定名称空间时将XML序列化为泛型集合

时间:2009-05-05 15:25:44

标签: .net xml-serialization xml-namespaces

假设我有以下XML文件:

<?xml version="1.0" encoding="utf-8"?>
<Customers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Customer.xsd">
    <Customer>
        <FirstName></FirstName>
        <LastName></LastName>
    </Customer>
    <Customer>
        <FirstName></FirstName>
        <LastName></LastName>
    </Customer>
    <Customer>
        <FirstName></FirstName>
        <LastName></LastName>
    </Customer>
</Customer>

我还创建了一个映射到相应字段的Customer对象。

现在,如果我尝试将其序列化为通用列表:

XmlSerializer xml = new XmlSerializer(typeof(List<Customer>));

我会得到一个例外,因为我的List没有映射到与XML文档中的Customers相同的命名空间,我无法将其添加为属性,因为我使用的是通用列表,而不是自定义集合

如何在不创建自定义集合的情况下告诉序列化程序将命名空间与列表匹配?

编辑: 我应该详细说明一下,序列化程序抛出的异常是:

(客户xmlns =''&gt;不是预期的。

现在因为我使用List(T)作为父节点,如何将通用列表与XML文档中指定的命名空间相匹配?

1 个答案:

答案 0 :(得分:1)

我认为该错误与&lt; Customers&gt;有关。节点不是xmlns。

尝试

XmlRootAttribute xr = new XmlRootAttribute("Customers");
XmlSerializer xs = new XmlSerializer(typeof(List<Customer>), xr); 

默认情况下,它会期望&lt; ArrayOfCustomer&gt;节点