C# 使用DataContract重构类的命名空间

C# 使用DataContract重构类的命名空间,c#,.net,datacontractserializer,C#,.net,Datacontractserializer,假设我有以下课程: namespace A.B.C { [DataContract] public Data { [DataMember] public int Value1 {get;set;} [DataMember] public double Value2 {get;set;} [DataMember] public MyClass Value3 {get;set;} } } namespace

假设我有以下课程:

namespace A.B.C
{
    [DataContract]
    public Data
    {
          [DataMember] public int Value1 {get;set;}
          [DataMember] public double Value2 {get;set;}
          [DataMember] public MyClass Value3 {get;set;}
    }
}

namespace X.Y.Z
{
    [DataContract]
    public Dataset
    {
        [DataMember] public Data Data1 {get;set;}
        [DataMember] public int Data2 {get;set;}
        // ...
    }
}
我一直在使用默认的
DataContractSerializer
序列化和反序列化
Dataset
对象。现在,在重构过程中,我将
Data
的名称空间从
A.B.C
更改为
A.B.C.D
,反序列化不再有效:
Data
的数据成员都是0

我试图通过向DataContract添加旧名称空间来修复此问题:

namespace A.B.C.D
{
    [DataContract(Namespace = "A.B.C")]
    public Data
    {
          [DataMember] public int Value1 {get;set;}
          [DataMember] public double Value2 {get;set;}
          [DataMember] public MyClass Value3 {get;set;}
    }
}
但这并不能解决问题。我还尝试了一个干净的重建和重新部署(Windows应用商店应用程序),以防万一,但仍然一无所获


如何修复反序列化?

如果未明确指定名称空间,则会在名称空间前面加前缀。你需要的是用以下东西装饰课堂:

[DataContract(Namespace = "http://schemas.datacontract.org/2004/07/A.B.C")]

@gleng什么代理文件?@gleng没有服务客户端,只有一个通过数据协定序列化将本地数据存储为文件的应用程序