JSON.. NET未知类型反序列化

本文关键字:反序列化 类型 未知 NET JSON | 更新日期: 2023-09-27 17:50:54

假设我有以下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;
}

换句话说,我如何处理基于属性名称的反序列化

JSON.. NET未知类型反序列化

你总是可以做一个通用的反序列化(到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");

我没有测试过这段代码。

<标题>编辑

你可能想要用[JsonIgnore]属性你的data属性,这样你就可以序列化GenericAGenericB没有相同的属性两次。