以下xml是序列化Asset objets的ArrayList的结果
<ArrayOfAsset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Asset>
<name>bill</name>
<type>perosn</type>
</Asset>
<Asset>
<name>bill</name>
<type>perosn</type>
</Asset>
</ArrayOfAsset>
我可以使用默认的C#反序列化器反序列化这个没问题。如果我的根元素从 ArrayOfAsset 更改为资产,我的反序列化器就会崩溃。如何让我的反序列化程序意识到这种变化。
这是我的反序列化代码:
StreamReader sr = new StreamReader("c:\\assest.xml");
string r = sr.ReadToEnd();
List<Asset> list;
Type[] extraTypes = new Type[1];
extraTypes[0] = typeof(Asset);
System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(List<Asset>), extraTypes);
object obj = serializer.Deserialize(xReader);
list = (List<Asset>)obj;
答案 0 :(得分:0)
我遇到了同样的问题。
在MSDN文档中指定:
注意XmlSerializer无法反序列化以下内容:ArrayList数组和List数组。
但我真的不知道这是否意味着你不能反序列化ArrayList或ArrayList的数组......这对我来说并不清楚。
http://msdn.microsoft.com/en-us/library/dk9cbaf1%28v=vs.110%29.aspx
使用服务堆栈序列化程序:)
答案 1 :(得分:0)
只要使用“默认”序列化,就无法更改XML格式。要支持调整的XML,您必须提供一些覆盖默认序列化的元数据。例如:https://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlattributes.xmlarray(v=vs.110).aspx
还可以将属性附加到Asset类(和相关的)。这样你就可以描述[XmlArray]和[XmlArrayItem]来支持所需的标签/子标签https://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlarrayitemattribute(v=vs.110).aspx