【发布时间】:2012-09-24 15:51:07
【问题描述】:
我在尝试让我的程序反序列化多个 XmlArrayItem 时遇到了一个相当愚蠢的问题。
XML 基本上是这样的:
<Root2>
<Data2>
<HOLD>
...
</HOLD>
<CUST_HOLD>
...
</CUST_HOLD>
</DATA2>
</ROOT2>
我的可序列化代码如下:
[Serializable()]
[System.Xml.Serialization.XmlRoot("Root2")]
public class Root2
{
[System.Xml.Serialization.XmlArray("Data2")]
[System.Xml.Serialization.XmlArrayItem("CUST_HOLD", typeof(CUST_HOLD))]
public CUST_HOLD[] CUST_HOLD { get; set; }
[System.Xml.Serialization.XmlArrayItem("HOLD", typeof(HOLD))]
public HOLD[] HOLD { get; set; }
}
我尝试了不同的配置,但这是唯一不会导致错误的配置。 但问题是,只有第一个 XmlArrayItem 得到处理(在本例中为 CUST_HOLD)。 另一个保持为空,而相应的数组中应该至少有一个项目。
【问题讨论】:
-
你试过 XmlElement 吗?
-
@CuongLe 你说得对,现在就处理它。
-
@MUG4N 我把
XmlArrayItem换成了XmlElement,如果这就是你的意思。不幸的是,这给出了 InvalidOperationException;反映类型“Root2”时出现错误。 :( -
让我直截了当地说...Data2 是数组外部节点,它包含Hold 和Cust_hold 条目?这似乎相当...效率低下。如果没有办法改善这一点,手动反序列化 xml 可能比尝试让序列化程序处理它更容易。使用一些 XSL 选择从 Data2 级别获取每个节点并编写解析器。
-
@Nevyn 事实上,我只是进行了更改以改进这种效率低下的结构。现在,我为 Cust_hold 条目获得了一个单独的数组外部节点,名为 Data3。而 Hold 条目仍保留在 Data2 中。到目前为止它似乎有效..
标签: c# xml serialization deserialization