Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.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/0/xml/12.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# 调用serialize方法时xml serialize崩溃_C#_Xml_Serialization_Xml Deserialization - Fatal编程技术网

C# 调用serialize方法时xml serialize崩溃

C# 调用serialize方法时xml serialize崩溃,c#,xml,serialization,xml-deserialization,C#,Xml,Serialization,Xml Deserialization,经过多次调试,我终于知道了坠机的确切原因。首先 测试1: 我正在从驱动器加载一个XML文件,根据MOTORCLASS对其进行反序列化,并使用MOTORCLASS属性,然后再次序列化为XML,效果很好 测试2: 我有一个Datatable,它的所有行都映射到MOTORCLASS属性,现在序列化为XML时会发生崩溃 在查看MOTORCLASS属性时 `public object APPOINTMENT { get { retur

经过多次调试,我终于知道了坠机的确切原因。首先

测试1:

我正在从驱动器加载一个XML文件,根据MOTORCLASS对其进行反序列化,并使用MOTORCLASS属性,然后再次序列化为XML,效果很好

测试2:

我有一个Datatable,它的所有行都映射到MOTORCLASS属性,现在序列化为XML时会发生崩溃

在查看MOTORCLASS属性时

    `public object APPOINTMENT
    {
        get
        {
            return this.aPPOINTMENTField;
        }
        set
        {
            this.aPPOINTMENTField = value;
        }
    }`  
在运行时,测试1将约会设置为Xmlnode 测试2将约会分配为日期时间

我认为,如果我将Datetime转换为Xmlnode,应该可以解决这个问题。但不确定如何实现这一目标。我试过了
[System.Xml.Serialization.xmlementAttribute(“约会”)]

但它仍然是过时的。有人能在这里说明一下吗

测试1:

测试2:


问题不在于碰巧分配给属性的值本身的类型;是
XmlSerializer
需要事先知道它可以预期的类型

如果
约会
应该始终是
日期时间
,只需将属性类型更改为
日期时间
。除了修复xml序列化问题外,这还可以防止错误并提高应用程序的性能

如果约会可以是不同的内容,则可以向序列化程序提供类型候选项:

[XmlElement("AppointmentAsDateTime", Type = typeof(DateTime))]
[XmlElement("AppointmentAsOtherType", Type = typeof(OtherType))]
public object APPOINTMENT { get; set; }
这使得序列化程序能够处理
约会
日期时间
其他类型
的情况

(这一解决方案归功于Marc Gravell:)