C#   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c# – XmlSerializer没有序列化自定义类型大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图通过以下代码序列化

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

大佬总结

以上是大佬教程为你收集整理的c# – XmlSerializer没有序列化自定义类型全部内容,希望文章能够帮你解决c# – XmlSerializer没有序列化自定义类型所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。