我正在尝试反序列化 XML(下)
由于 XML 的“非标准”结构,我被困住了。而不是序列化 Products 集合的常规方式,即:具有许多子元素的父级。它们有许多父元素,每个父元素都有一个子元素。
我的问题是,由于这种不寻常的数组结构(我怀疑是由于错误),我无法弄清楚如何设置属性,即:[XMLArrayItem] 以便我可以提取有意义的数据。
注意:XML 是来自公共第 3 方的 HTTPResponse。(所以我不能让他们改变它。)
具体来说:而不是具有许多 <Product> 元素的 <Product> 父级。
<betType> 节点有多个< Products> 父元素,每个父元素都有一个< Product> 子元素。
您可以完全自由地创建具有所需属性的任何类。显然,该解决方案需要 BetType 和 Product 类。我已经尝试过使用和不使用 Products 类。
<rootnode>
:
<bet_types>
<bet_type id="105">
<name>Exacta</name>
<products>
<product id="17">
<name>STAB</name>
<max_stake>10000</max_stake>
<allow_multiple>0</allow_multiple>
<allow_flexi>1</allow_flexi>
<product_default>1</product_default>
</product>
</products>
<products>
<product id="25">
<name>NSW</name>
<max_stake>10000</max_stake>
<allow_multiple>0</allow_multiple>
<allow_flexi>1</allow_flexi>
</product>
</products>
</bet_type>
<bet_type id="107">
<name>Quinella</name>
<products>
<product id="18">
<name>STAB</name>
<max_stake>10000</max_stake>
<allow_multiple>0</allow_multiple>
<allow_flexi>1</allow_flexi>
<product_default>1</product_default>
</product>
</products>
<products>
<product id="26">
<name>NSW</name>
<max_stake>10000</max_stake>
<allow_multiple>0</allow_multiple>
<allow_flexi>1</allow_flexi>
</product>
</products>
</bet_type>
:
</rootnode>
理想情况下,我们可以使用 .Net C# xmlSerializer,因为我将它用于所有其他调用。这个示例是嵌套在 HTTPResponse 深处的一个小片段。
一种可能的替代方法是使用 XSLT 重新格式化它,但我希望有一种方法可以使用属性。我认为它更干净,而且我不确定如何编写 XSLT 来做到这一点。
注意:或者,如果您可以建议一种为父数组“不生成”节点的方法,而只需为每个数组项创建节点,那将有所帮助。作为我尝试过的方法之一非常接近。但是我仍然有一个“产品”节点,它是多个产品节点的父节点,每个产品节点都包含一个产品节点。
谢谢你的帮助。