使用DataContract重构类的命名空间

时间:2013-11-01 12:58:38

标签: 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 X.Y.Z
{
    [DataContract]
    public Dataset
    {
        [DataMember] public Data Data1 {get;set;}
        [DataMember] public int Data2 {get;set;}
        // ...
    }
}

我没有使用默认DatasetDataContractSerializer个对象进行序列化和反序列化。现在,在重构期间,我将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应用商店应用),以防万一,但仍然没有。

如何修复反序列化?

1 个答案:

答案 0 :(得分:1)

如果未明确指定名称空间,则会为其添加前缀。你需要的是用类似的东西来装饰这个类:

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