我已经通过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生成的类仅包含根类的命名空间属性。
答案 0 :(得分:1)
它在这里做的是从具有特定名称空间"blabla"
的父元素覆盖名称空间""
。
它在这里执行的原因是因为tag1
有一个空的命名空间集(或者它隐式地推断它有一个空的命名空间),而myroot
具有命名空间"blabla"
。
解决方案是确保tag1
与"blabla"
具有相同的命名空间。
我知道,这非常令人恼火,因为这意味着你必须一次又一次地提供命名空间,但这就是它的工作原理。