反序列化XML到对象在C#
问题描述:
以下XML一个ArrayList是序列化资产OBJETS反序列化XML到对象在C#
<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#解串器没有问题,这反序列化的ArrayList的结果。如果我的根元素从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;
答
我有同样的问题。
在MSDN文档中指定:
注的XmlSerializer无法反序列化下列:的ArrayList阵列和列表的阵列。
但我真的不知道这是否意味着你不能反序列化ArrayList或ArrayList的数组......对我而言这并不清楚。
http://msdn.microsoft.com/en-us/library/dk9cbaf1%28v=vs.110%29.aspx
使用服务栈串行:)
答
只要你使用 “默认” 的序列化,你不能改变的XML格式。为了支持微调的XML,你必须提供一些覆盖默认序列化的元数据。例如:https://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlattributes.xmlarray(v=vs.110).aspx
此外它可能是值得将属性附加到您的资产类(及相关)。这样,您可以描述[XmlArray]和[XmlArrayItem]以支持所需的标记/子标记https://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlarrayitemattribute(v=vs.110).aspx
序列化程序是否要写入您正在反序列化的XML,或者您是否有其他源? – driis
“XmlSerializer”类预计XML的格式与它生成的格式相同,而不是您的任意格式。您需要为此编写自己的XML反序列化类。 – Polynomial