1

次のjson文字列があり、一部のプロパティ名が異なりますが(「dataA」、「dataB」)、同じ構造が含まれているとします。

{
  "mainprop": "val",
  "dataA": { "prop1":"val", "prop2":"val"}
}

{
  "mainprop": "val",
  "dataB": { "prop1":"val", "prop2":"val"}
}

これらのjsonを次のジェネリッククラスを持つオブジェクトに逆シリアル化する方法

Class Generic
{
  string mainprop;
  DataClass data; 
}

Class DataClass
{
  string prop1;
  string prop2;
}

つまり、プロパティの名前に基づいてデシリアライズを処理する方法です。

4

1 に答える 1

0

いつでも一般的な逆シリアル化 ( to Dictionary<string, object>) を実行してから、値を自分でマップできますが、これはあなたが探しているものではないと思います。

私が思いつく唯一の方法は、デシリアライゼーション/シリアライゼーション専用の 2 つのダミー オブジェクトを作成することです。

public class GenericA : Generic {
    public DataClass dataA { get { return data; } set { data = value; } }
}

public class GenericB : Generic {
    public DataClass dataB { get { return data; } set { data = value; } }
}

Generic a = JsonConvert.DeserializeObject<GenericA>("JSON using dataA");
Generic b = JsonConvert.DeserializeObject<GenericB>("JSON using dataB");

このコードはテストしていません。

編集

同じプロパティを 2 回持たずにシリアル化できるように、dataプロパティに属性を付けることができます。[JsonIgnore]GenericAGenericB

于 2013-01-07T01:22:22.347 に答える