Как сериализовать XML в универсальную коллекцию, когда указано пространство имен - PullRequest
1 голос
/ 05 мая 2009

Допустим, у меня есть следующий 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>));

Я получу исключение, потому что мой список не сопоставлен с тем же пространством имен, что и клиенты в документе XML, и я не могу добавить его в качестве атрибута, потому что я использую общий список, а не пользовательский коллекция

Как я могу сказать сериализатору сопоставить пространство имен со списком, не создавая пользовательскую коллекцию?

Edit: Я должен немного пояснить, исключение, выдаваемое сериализатором:

(Клиенты xmlns = ''> не ожидались.

Теперь, поскольку я использую List (T) в качестве родительского узла, как я могу сопоставить общий список с пространством имен, указанным в документе XML?

1 Ответ

1 голос
/ 05 мая 2009

Я думаю, что ошибка связана с узлом , а не с xmlns.

Попробуйте

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

По умолчанию ожидается узел

...