Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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# 带有继承更改的DataContract_C#_.net_Wcf_Datacontract - Fatal编程技术网

C# 带有继承更改的DataContract

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;

我正在使用DataContracts来序列化对象。假设我以这种方式序列化了一个数据结构:

[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; 
}