从xmlserializer生成的xml中的额外xmlns

时间:2010-11-10 13:53:57

标签: .net xml-namespaces xmlserializer

我已经通过xsd.exe工具

从架构生成了一个类

现在,当我序列化课程时,我会在根目录下的所有内容上获得额外的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 个答案:

答案 0 :(得分:1)

它在这里做的是从具有特定名称空间"blabla"的父元素覆盖名称空间""

它在这里执行的原因是因为tag1有一个空的命名空间集(或者它隐式地推断它有一个空的命名空间),而myroot具有命名空间"blabla"

解决方案是确保tag1"blabla"具有相同的命名空间。

我知道,这非常令人恼火,因为这意味着你必须一次又一次地提供命名空间,但这就是它的工作原理。