繁体   English   中英

将xml反序列化为C#中的对象的ArrayList

[英]Deserializing xml into an ArrayList of objects in C#

以下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;

我有同样的问题。

在MSDN文档中指定:

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

但是我真的不知道这是否意味着您不能对ArrayList或ArrayList的数组进行反序列化...对我来说还不清楚。

http://msdn.microsoft.com/zh-CN/library/dk9cbaf1%28v=vs.110%29.aspx

使用服务堆栈序列化器:)

一旦使用“默认”序列化,就无法更改XML格式。 为了支持经过调整的XML,您必须提供一些覆盖默认序列化的元数据。 例如: https : //msdn.microsoft.com/zh-cn/library/system.xml.serialization.xmlattributes.xmlarray(v=vs.110).aspx

同样,将属性附加到Asset类(和相关类)可能也是值得的。 这样,您可以描述[XmlArray]和[XmlArrayItem]以支持必需的标签/子标签https://msdn.microsoft.com/zh-cn/library/system.xml.serialization.xmlarrayitemattribute(v=vs.110).aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM