Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XmlSerializer未序列化自定义类型_C#_.net_Xml_Xml Serialization - Fatal编程技术网

C# XmlSerializer未序列化自定义类型

C# XmlSerializer未序列化自定义类型,c#,.net,xml,xml-serialization,C#,.net,Xml,Xml Serialization,我正试图通过以下代码进行序列化 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

我正试图通过以下代码进行序列化

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>

5.
1.
R251
知道为什么没有正确序列化吗

编辑:

public结构McPosition:IComparable{
专用只读int_站;
专用只读int_插槽;
私有只读int_子地块;
公共静态McPosition Empty=新McPosition(-1,-1,-1);
公共McPosition(内部站点、内部插槽、内部子地块){
_车站=车站;
_槽=槽;
_子批次=子批次;
}
等等


谢谢。

要通过
XmlSerializer
进行序列化,类型上的每个属性都必须有一个公共getter和setter(并且不能标记为
[XmlIgnore]
,也不能有返回false的
ShouldSerialize*()
等)。公共字段也会被序列化(只要它们不是
只读的,但公开字段就更不可取了。
XmlSerializer
从不查看私有成员

我猜测(编辑:现在被更新的问题确认了)
McPosition
是一个不可变的向量,没有公共设置器。这不起作用。选项:

  • 实现
    IXmlSerializable
    (老实说,不太好)
  • 将公共设置器添加到
    McPosition
  • 使用完全可变的单独DTO

您必须为XML可序列化字段添加公共getter和setter。此处:Station、Slot和Subslot。

以及
McPosition
是什么样子的?请向我们展示
McPosition
类型的定义。
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;
    }