Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.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# 使用DataContractSerializer处理多态性_C#_Json_Polymorphism_Datacontractserializer - Fatal编程技术网

C# 使用DataContractSerializer处理多态性

C# 使用DataContractSerializer处理多态性,c#,json,polymorphism,datacontractserializer,C#,Json,Polymorphism,Datacontractserializer,与中国的情况类似, 我有一个子类继承自基类,该基类使用 新关键字 抛出的错误示例: 数据协定类型“AEx”无法使用DataContractJsonSerializer序列化,因为数据成员“Date”在其类型层次结构中重复 我知道这无法反序列化/序列化的原因 我想了解一种解决这个问题的方法,因为在当时,我无法专门重构这段代码 [DataContract] class A { [DataMember] [I'm an attribute] public DateTime D

与中国的情况类似,

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

抛出的错误示例:

数据协定类型“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;} 
}  

我希望能够将这个类自由地反序列化为frojson

您可以将A级中的日期设置为虚拟:

[DataContract]
class A 
{ 
    [DataMember]
    [SomeAttribute]
    public virtual DateTime Date {get; set;} 
}
并在B类中覆盖它:

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

使用json.net。您也可以将其配置为序列化类型信息。我现在来看看。谢谢。我不能改变现有的等级,那艘船已经开航了=(我明白了。我想,你只是不允许更改类的结构。在这种情况下,我担心你将不得不切换到另一个.NET Json序列化程序,因为DataContractJsonSerializer对此非常严格。