在C#中序列化一个arraylist
我有一个包含许多标准字段和一个arraylist的类。
有没有办法使用XmlSerializer序列化类?
到目前为止尝试导致错误消息说:
未处理的exception:System.InvalidOperationException:发生错误 生成XML文档。 ---> System.InvalidOperationException:类型 不期望XMLSerialization.DataPoints。 使用XmlInclude或 SoapInclude属性用于指定静态未知的类型。
类的一些截断表示如下所示:
public class StationData { private DateTime _CollectionDate; private string _StationID; private ArrayList _PolledData; public StationData() { } public DateTime CollectionDate { get { return _CollectionDate; } set { _CollectionDate = value; } } public string StationID { get { return _StationID; } set { _StationID = value; } } [XmlInclude(typeof(DataPoints))] public ArrayList PolledData { get { return _PolledData; } set { _PolledData = value; } } } public class DataPoints { private string _SubStationID; private int _PointValue; public DataPoints { } public string SubStationID { get { return _SubStationID; } set { _SubStationID = value; } } public int PointValue { get { return _PointValue; } set { _PointValue = value; } } }
我取得了以下成功:
[XmlArray("HasTypeSpecialisations")] [XmlArrayItem("TypeObject", typeof(TypeObject), IsNullable = false)] public List TypeSpecialisations
这导致:
在你的情况下,我会尝试类似的东西:
[XmlArrayItem(typeof(DataPoints))] public ArrayList PolledData
基于此链接https://msdn.microsoft.com/en-us/library/2baksw0z(VS.85).aspx你也应该能够使用这个
[XmlElement(Type = typeof(DataPoints))] public ArrayList PolledData
XmlSerializer在运行时生成一些代码来序列化您的类。 这个类必须知道可能发生的所有类型。
ArrayList不提供此信息,但您可以通过在返回ArrayList的属性上使用XmlInclude属性来提供此信息。
[XmlInclude(typeof(DataPoints))] public ArrayList Points { ... }
您还可以使用通用List <>类。
我认为你可以通过使用通用列表(List <>)而不是ArrayList来解决这个问题,但是,我会假设你不能出于某种原因使用泛型。
您需要告诉编译器ArrayList中包含哪些类型,因此它可以序列化它,因为它知道它包含对象。
将此添加到您的属性上方,它应该清除它。 [System.Xml.Serialization.XmlInclude(typeof运算(XMLSerialization.DataPoints))]
当然,将ArraySerialization.DataPoints替换为ArrayList中包含的任何类。
看一下这篇文章 ,它描述了你遇到的基本问题以及它周围的解决方案(比如使用XmlInclude属性)。 基本上说的是序列化程序遇到了一个它不知道如何序列化的类型。 如果您发布一些代码,它也会有很大帮助。
我总是用来序列化列表的方法是将它们转换为Arrays(具有必要的类型信息)。 我承认这有点脏,但如果你无法获得一个正确的序列化列表,这将有效。
上述就是C#学习教程:在C#中序列化一个arraylist分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/983828.html