调用serialize mehod

时间:2015-05-28 03:25:29

标签: c# xml serialization xml-deserialization

经过大量调试后,我才知道崩溃的确切原因。首先

测试1:

我正在从驱动器加载一个XML文件,将其反序列化为MOTORCLASS并使用MOTORCLASS属性,稍后再次序列化为XML它工作正常。

测试2:

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

查看MOTORCLASS属性时

    `public object APPOINTMENT
    {
        get
        {
            return this.aPPOINTMENTField;
        }
        set
        {
            this.aPPOINTMENTField = value;
        }
    }`  

在运行时,TEST 1将APPOINTMENT设置为 Xmlnode TEST 2将APPOINTMENT指定为日期时间

我认为如果我将Datetime转换为Xmlnode,它应该解决问题。但不知道如何实现它。我试过了 [System.Xml.Serialization.XmlElementAttribute("APPOINTMENT")]

但它仍然是Datetime。任何人都可以在这里说清楚。

测试1:

enter image description here 测试2:

enter image description here

1 个答案:

答案 0 :(得分:1)

问题不在于碰巧分配给财产的价值本身的类型;它是XmlSerializer之前需要知道它可以预期的类型。

如果APPOINTMENT 始终为DateTime,只需将属性类型更改为DateTime即可。除了修复xml序列化问题外,这还可以防止错误并提高应用程序的性能。

如果APPOINTMENT可以是不同的东西,您可以为序列化器提供候选类型:

[XmlElement("AppointmentAsDateTime", Type = typeof(DateTime))]
[XmlElement("AppointmentAsOtherType", Type = typeof(OtherType))]
public object APPOINTMENT { get; set; }

这使序列化程序能够处理APPOINTMENTDateTimeOtherType的情况。

(相信该解决方案归Marc Gravell所有:How to serialize property of type Object with XmlSerializer