C# 带有继承更改的DataContract
我正在使用DataContracts来序列化对象。假设我以这种方式序列化了一个数据结构:C# 带有继承更改的DataContract,c#,.net,wcf,datacontract,C#,.net,Wcf,Datacontract,我正在使用DataContracts来序列化对象。假设我以这种方式序列化了一个数据结构: [DataContract] public class Dog : IExtensibleDataObject { [DataMember] public int age; [DataMember] public string name; ExtensionDataObject IExtensibleDataObject.ExtensionData { get;
[DataContract]
public class Dog : IExtensibleDataObject
{
[DataMember]
public int age;
[DataMember]
public string name;
ExtensionDataObject IExtensibleDataObject.ExtensionData { get; set; }
}
现在,我正在更改我的体系结构,我希望使用以下类读取以前序列化的数据:
[DataContract]
[KnownType(typeof(Dog))]
public class Animal : IExtensibleDataObject
{
[DataMember]
public string name;
ExtensionDataObject IExtensibleDataObject.ExtensionData { get; set; }
}
[DataContract]
public class Dog : Animal
{
[DataMember]
public int age;
}
但是我得到name=null。我知道这取决于顺序:文件保存时先使用age for first,然后从name开始读取,因为它位于基类上。
有没有办法解决这个问题,也许可以改变订单?我认为这是不可能的 过去的xml应该是
我认为那是不可能的 过去的xml应该是 你应该看一看 基本上,如果您希望在合同发展过程中实现向后兼容性,您需要在上分配一个,并保留新版本和旧版本。您应该看看
基本上,如果您希望在合同发展过程中实现向后兼容性,您需要在您的上分配一个,并保留新版本和旧版本。@silverninja我喜欢,请参考我自己的问题;太棒了…我没听懂!我昨天读了,很感谢你最近的帖子。WCF版本控制一直是我们要解决的问题,但我们从未使用过名称空间。@silverninja我喜欢它,引用我自己的问题;太棒了…我没听懂!我昨天读了,很感谢你最近的帖子。WCF版本控制一直是我们要解决的问题,但我们从未使用过名称空间。虚拟建议有效吗?虚拟建议有效吗?
<dog>
<name>Bob</name>
<age>10</age>
</dog>
<animal>
<name>Bob</name>
<dog>
<age>10</age>
</dog>
</animal>
[DataContract]
[KnownType(typeof(Dog))]
public class Animal : IExtensibleDataObject
{
public virtual string name;
ExtensionDataObject IExtensibleDataObject.ExtensionData { get; set; }
}
[DataContract]
public class Dog : Animal
{
[DataMember]
public override string name;
[DataMember]
public int age;
}