在c#中将xml反序列化为对象的数组列表

本文关键字:对象 数组 列表 反序列化 中将 xml | 更新日期: 2023-09-27 18:10:36

下面的xml是序列化一个资产对象的数组列表的结果

<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变为assets,我的反序列化器就会崩溃。如何让反序列化器意识到这个更改?

这是我的反序列化代码:

  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;

在c#中将xml反序列化为对象的数组列表

我也有同样的问题。

在MSDN文档中指定:

注意XmlSerializer不能反序列化以下类型的数组:ArrayList的数组和List的数组。

但是我真的不知道这是否意味着你不能反序列化数组的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