我正在尝试反序列化一些我不负责生成的 XML。它有一个单一的节点和几个模块的各种分支。问题是每个模块可能具有相似的子节点,这些子节点具有不同的节点和属性,但名称相同。这些相似的节点没有命名空间。在抽象中,它看起来像这样作为目标类型。
<Root>
<Module1>
<Node SomeAttribute="123" />
</Module1>
<Module2>
<Node SomeOtherAttribute="Something" />
</Module2>
</root>
我似乎有各种建议来用命名空间注释我的 pocos 以避免在我尝试XmlSerializer
使用同时具有和作为成员的Root
类型构造一个时产生的异常。Module1
Module2
System.InvalidOperationException : Types 'Root.Module1.Item1' and 'Root.Module1.Item2' both use the XML type name, 'Item', from namespace ''. Use XML attributes to specify a unique XML name and/or namespace for the type.
我认为如果使用System.Text.Json
我不会有这个问题,因为类型是由 poco 类结构决定的,而不是我被反序列化的节点的名称。
有没有办法以整体形式反序列化这个对象,也许是通过用装饰器注释Module1.Node
和poco 类?Module1.Node
我尝试时找不到相关的装饰器。我确实成功地停止了XmlSerializer
构造函数异常,但它停止识别Node
类型并且也无法反序列化。
我的下一步将为XmlSerializer
每个模块创建单独的实例,并尝试看看我是否可以取消Root
无论如何感觉效率低下的对象。
这是小提琴中的设置示例: https ://dotnetfiddle.net/0twN0O