使用DataContractSerializer处理多态性

本文关键字:多态性 处理 DataContractSerializer 使用 | 更新日期: 2023-09-27 18:05:26

类似于为什么json序列化器不符合多态性?

我有一个继承自基类的子类,它使用新的关键字。

抛出的错误示例:

数据契约类型'AEx'不能用DataContractJsonSerializer序列化,因为数据成员'Date'在它的类型层次结构中是重复的。

我知道为什么不能反/序列化的原因。

我想了解如何解决这个问题的方法,因为当时,我无法特别重构那段代码。

[DataContract]
class A { 
    [DataMember]
    [I'm an attribute]
    public DateTime Date {get;set;} 
}

Codebase包含一个子类,该子类想要覆盖现有的继承属性,以便将自己的一组属性强加给它。

[DataContract]
class AEx : A { 
    [DataMember]
    [I'm a different attribute]
    new public DateTime Date {get;set;} 
}  

我想能够反/序列化这个类自由地从json。

使用DataContractSerializer处理多态性

你可以把A类中的Date设为虚的:

[DataContract]
class A 
{ 
    [DataMember]
    [SomeAttribute]
    public virtual DateTime Date {get; set;} 
}

并在类B中重写它:

[DataContract]
class B : A 
{ 
    [DataMember]
    [SomeOtherAttribute]
    public override DateTime Date {get; set;} 
}