0

次のクラスがあるとします。

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、逆シリアル化が機能しなくなりました: の DataMembersDataはすべて 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 ストア アプリ) も試しましたが、それでも何もしませんでした。

デシリアライゼーションを修正するにはどうすればよいですか?

4

1 に答える 1

1

名前空間が明示的に指定されていない場合は、プレフィックスが付けられます。必要なのは、クラスを次のようなもので装飾することです。

[DataContract(Namespace = "http://schemas.datacontract.org/2004/07/A.B.C")]
于 2013-11-01T13:26:05.327 に答える