【问题标题】:xml serialize crash when calling serialize mehod调用序列化方法时xml序列化崩溃
【发布时间】:2015-05-28 16:40:59
【问题描述】:

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

测试 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 而 测试 2 将 APPOINTMENT 指定为 Datetime

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

但它仍然是日期时间。任何人都可以在这里阐明一下。

测试 1:

测试 2:

【问题讨论】:

    标签: c# xml serialization xml-deserialization


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-22
      • 2012-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多