[英]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.