对于一个 C# 项目,我正在查询一个 API,它返回一个类似于以下内容的 XML:
<itemlist>
<item attrib1="Value1" attrib2="Value2"... attrib15="Value15">
<sometypeinfo1 attrib1="Value1" attrib2="Value2"... attrib15="Value15">
<subelement>
<someproperty attrib1="Value1" attrib2="Value2"/>
<someproperty attrib1="Value1" attrib2="Value2"/>
<someproperty attrib1="Value1" attrib2="Value2"/>
</subelement>
</sometypeinfo1>
<sometypeinfo2>
<subelement attrib1="Value1" attrib2="Value2">
<someproperty>
<somedescription attrib1="Value1" attrib2="Value2"/>
<somedescription attrib1="Value1" attrib2="Value2"/>
</someproperty>
</subelement>
</sometypeinfo2>
<sometypeinfo3 attrib1="Value1" attrib2="Value2"/>
<sometypeinfo4>
<someproperty attrib1="Value1" attrib2="Value2"/>
</sometypeinfo4>
<sometypeinfo5>
<someproperty attrib="somevalue"/>
</sometypeinfo5>
<somemodifiers>
<somemodifier attrib1="Value1" attrib2="Value2"/>
<somemodifier attrib1="Value1" attrib2="Value2"/>
<somemodifier attrib1="Value1" attrib2="Value2"/>
</somemodifiers>
<someflags>
<someflag attrib="somevalue"/>
<someflag attrib="somevalue"/>
<someflag attrib="somevalue"/>
</someflags>
</item>
<item>
.
.
.
</item>
</itemlist>
它基本上是一个包含约 100 个项目/文件的列表,每个项目都有很多描述、属性等。现在,这并不罕见。我无法将其映射到类或数据集中。例如这一行
<sometypeinfo1 attrib1="Value1" attrib2="Value2"... attrib15="Value15">
一个项目可能错过 attrib1,另一个 attrib2,第三个可能有全部 15 个等。
与“Someflags”相同,一个项目可以有 5 个“someflag”,下一个只有 2 个。等等。每个元素或属性都可以在那里,但不是必须的。所以它们都共享一个元素/属性池,这就是我陷入序列化等问题的地方。
是的,我是新手。但是从我到目前为止所学到的知识来看,模式必须具有所有元素/属性才能正确映射 XML?
唯一想到的是编写另一个工具来收集所有可能的元素等,然后编写一个包含所有内容的类,首先将所有内容设为 NULL,然后只解析 XML,覆盖在实际项目中找到的所有内容。