代码之家  ›  专栏  ›  技术社区  ›  mwjackson

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

  •  1
  • mwjackson  · 技术社区  · 15 年前

    假设我有以下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>
    

    我还创建了一个映射到适当字段的客户对象。

    现在,如果我尝试将其序列化为一个泛型列表,例如:

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

    我将得到一个异常,因为我的列表没有映射到与XML文档中的客户相同的命名空间,并且我无法将其作为属性添加,因为我使用的是通用列表,而不是自定义集合

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

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

    (不需要客户xmlns='>。

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

    1 回复  |  直到 15 年前
        1
  •  1
  •   Jeff Hall    15 年前

    我认为错误与<客户>节点有关,而不是与xmlns有关。

    尝试

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

    默认情况下,它需要一个<arrayofcustomer>节点