假设我有以下课程:
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;}
// ...
}
}
我没有使用默认Dataset
对DataContractSerializer
个对象进行序列化和反序列化。现在,在重构期间,我将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应用商店应用),以防万一,但仍然没有。
如何修复反序列化?
答案 0 :(得分:1)
如果未明确指定名称空间,则会为其添加前缀。你需要的是用类似的东西来装饰这个类:
[DataContract(Namespace = "http://schemas.datacontract.org/2004/07/A.B.C")]