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

C# JSON.NET未知类型反序列化,c#,.net,json,C#,.net,Json,假设我有以下json字符串,其中一些属性名称不同(“dataA”、“dataB”),但它包含相同的结构 { "mainprop": "val", "dataA": { "prop1":"val", "prop2":"val"} } 及 如何将这些JSON反序列化为具有以下泛型类的对象 Class Generic { string mainprop; DataClass data; } Class DataClass { string prop1; string pr

假设我有以下json字符串,其中一些属性名称不同(“dataA”、“dataB”),但它包含相同的结构

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

如何将这些JSON反序列化为具有以下泛型类的对象

Class Generic
{
  string mainprop;
  DataClass data; 
}

Class DataClass
{
  string prop1;
  string prop2;
}

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

您始终可以执行一般的反序列化(到
字典
),然后自己映射值,但我怀疑这不是您想要的

我脑子里想的唯一办法就是制作两个虚拟对象,仅用于反序列化/序列化目的

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");
公共类泛型:泛型{
公共数据类dataA{get{return data;}set{data=value;}}
}
公共类泛型B:泛型{
公共数据类dataB{get{return data;}set{data=value;}}
}
泛型a=JsonConvert.DeserializeObject(“使用dataA的JSON”);
泛型b=JsonConvert.DeserializeObject(“使用数据的JSON”);
我还没有测试过这段代码

编辑
您可能希望使用
[JsonIgnore]
为您的
数据
属性赋予属性,这样您就可以序列化
GenericA
GenericB
,而不必两次拥有相同的属性。

欢迎使用堆栈溢出!您尝试过什么?您可以使用正则表达式预处理json字符串以匹配您的目标类。我希望避免字符串预处理,并尝试在general json.net parse json string中找到更优雅的解决方案,并能够触发MissingMember错误,因此,if将选择通过获取成员名称和为我的“数据”成员返回自定义反序列化的能力来处理此问题。感谢您的响应,但您的解决方案需要生成虚拟类。在我的例子中,属性的“名称”数组太大和动态。是否有任何方法可以通过编程方式处理某些丢失的成员?JSON.NET设置有MissingMemberHandling属性,但我看不出如何处理它并以某种方式返回正确的类反序列化
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");