Дополнительные xmlns в xml, сгенерированные из xmlserializer - PullRequest
3 голосов
/ 10 ноября 2010

Я сгенерировал класс из схемы с помощью инструмента xsd.exe

Теперь, когда я сериализую класс, я получаю дополнительные xmlns="" для всего, что находится ниже корня.* Схема выглядит следующим образом:

<xsd:schema xmlns="blabla" targetNamespace="blabla" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="MyRoot">

Я не вижу ничего в схеме, указывающей на то, что элемент tag1 и ниже должен находиться в другом пространстве имен, чем корень.1013 * Код сериализации просто выполняет:

MyRoot doc = new MyRoot();
...
XmlSerializer xs = new XmlSerializer(typeof(MyRoot));
MemoryStream ms = new MemoryStream();
try {
    xs.Serialize(ms, doc);

Класс, сгенерированный из xsd.exe, содержит только атрибут пространства имен в корневом классе.

1 Ответ

1 голос
/ 10 ноября 2010

Здесь он переопределяет пространство имен "blabla" из родительского элемента с определенным пространством имен "".

Причина, по которой он здесь, заключается в том, что tag1 имеетпустой набор пространств имен (или он подразумевает, что у него есть пустое пространство имен) и что myroot имеет пространство имен "blabla".

Решение состоит в том, чтобы убедиться, что tag1 имеет то же пространство имен, что и "blabla".

Я знаю, это очень раздражает, потому что это означает, что вы должны предоставлять пространство имен снова и снова, но вот как это работает.

...