【发布时间】:2009-11-23 23:55:57
【问题描述】:
我在使用 Microsoft 的 .net XmlSerializer 时遇到了一些难题。我正在尝试将一些 XML 反序列化为一个对象,如果我使用单个对象,这很好,但是当将一个对象放入 List 并尝试对其进行序列化/反序列化时,问题就来了。首先,这里有一个示例 C# windows 控制台程序来说明问题:
如果类 'Foo' 被序列化为根元素,则一切正常,并且正如预期的那样 - JezNamespace xmlns 应用于根 Foo 元素,并且反序列化可以正常进行。但是,如果我创建一个列表并对其进行序列化,则 XmlSerializer: - 创建 ArrayOfFoo 的根元素 - 将 Foo 元素作为该元素的子元素 - 将 Foo 的每个子项的 xmlns 设置为 JezNamespace 命名空间!
我对前两个没问题,但第三个似乎很疯狂......也许是 XmlSerializer 中的错误?有什么办法可以处理这种行为吗?我不想为 Foo 的每个孩子指定我的命名空间,我只想为 Foo 指定它。如果我这样做,目前,XmlSerializer 不会正确反序列化类 - 它只是跳过设置了 JezNamespace xmlns 的任何 Foo 元素。我必须将所有子元素设置为具有该 xmlns。
我想要的是 XmlSerializer 生成类似的东西:
<ArrayOfFoo>
<Foo xmlns="http://schemas.datacontract.org/2004/07/JezNamespace">
<Field1>hello</Field1>
<Field2>world</Field2>
</Foo>
<Foo xmlns="http://schemas.datacontract.org/2004/07/JezNamespace">
<Field1>aaa</Field1>
<Field2>bbb</Field2>
</Foo>
</ArrayOfFoo>
... 然后让 XmlSerializer 能够将其正确反序列化为列表。有什么想法可以让我这样做吗?
【问题讨论】:
标签: c# serialization