c# – XmlSerializer没有序列化自定义类型
发布时间:2020-12-16 01:47:31 所属栏目:百科 来源:网络整理
导读:我试图通过以下代码序列化 var data = argsPerCall.ToArray();var knownTypes = new[] { typeof(int),typeof(int),typeof(string),typeof(McPosition)};var serializer = new XmlSerializer(data.GetType(),knownTypes);// Writing the file requires a Text
我试图通过以下代码序列化
var data = argsPerCall.ToArray(); var knownTypes = new[] { typeof(int),typeof(int),typeof(string),typeof(McPosition)}; var serializer = new XmlSerializer(data.GetType(),knownTypes); // Writing the file requires a TextWriter. var myStreamWriter = new StreamWriter(filename); serializer.Serialize(myStreamWriter,data); myStreamWriter.Close(); 我遇到了McPosition类型的问题. 用于以下输入 5,1,"R251",{1,2,3} 我正在进行序列化 <ArrayOfAnyType> <anyType xsi:type="xsd:int">5</anyType> <anyType xsi:type="xsd:int">1</anyType> <anyType xsi:type="xsd:string">R251</anyType> <anyType xsi:type="McPosition" /> </ArrayOfAnyType> 知道为什么它没有正确序列化? 编辑: public struct McPosition : IComparable<McPosition> { private readonly int _station; private readonly int _slot; private readonly int _subslot; public static McPosition Empty = new McPosition(-1,-1,-1); public McPosition(int station,int slot,int subslot) { _station = station; _slot = slot; _subslot = subslot; } 等等…. 谢谢 . 解决方法
要通过XmlSerializer进行序列化,类型上的每个属性都必须具有公共getter和setter(并且不标记为[XmlIgnore],也不具有返回false的ShouldSerialize *()等).公共字段也是序列化的(只要它们不是只读的),但是暴露字段更不可取. XmlSerializer从不查看私有成员.
我猜测(编辑:现在由更新的问题确认)McPosition是一个不可变的向量,没有公共setter.那不行.选项: >实现IXmlSerializable(不是太好了,说实话)>将公共设置者添加到McPosition>使用完全可变的单独DTO (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |