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>),然后自己映射值,但我怀疑这不是您想要的。

我能想到的唯一方法是制作两个虚拟对象仅用于反序列化/序列化目的。

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");

我没有测试过这段代码。

编辑

您可能希望为您的属性赋予data属性,[JsonIgnore]以便您可以序列化GenericA并且GenericB没有两次相同的属性。

于 2013-01-07T01:22:22.347 回答