2010-11-10 2 views
3

Я создал класс из схемы через Xsd.exe инструментаДополнительное XMLNS в XML, полученное от XmlSerializer

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

<myroot xmlns="blabla"> 
    <tag1 xmlns=""> 
     <tag2> 
      ... 

Схема выглядит следующим образом:

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

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

код сериализации просто делает:

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

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

ответ

1

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

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

Решение должно гарантировать, что tag1 имеет такое же пространство имен, что и "blabla".

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

+0

Итак, в схеме вы должны явно указать пространство имен для всех элементов (кроме корневого)? Не знаю, спасибо. – adrianm

Смежные вопросы