2013-01-07 94 views
1

假设我有以下的JSON字符串,其中一些属性名称differes( “数据A”, “数据B”),但它包含了相同的结构JSON.NET未知类型的反序列化

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

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

我如何反序列化这些jsons对象具有以下通用类

Class Generic 
{ 
    string mainprop; 
    DataClass data; 
} 

Class DataClass 
{ 
    string prop1; 
    string prop2; 
} 

换句话说,我该怎么处理d基于财产名称的序列化。

+0

欢迎来到Stack Overflow!你有什么尝试? – IronMan84

+0

您可以使用正则表达式预处理json字符串以匹配您的目标类。 –

+0

我想避免字符串预处理,并试图找到更优雅的解决方案 –

回答

0

您可以随时进行通用反序列化(至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和​​无需两次相同的属性。

+0

感谢您的回应,但您的解决方案需要生成虚拟类。在我的情况下,属性的“名称”数组太大而且动态。有没有办法以编程方式处理一些缺失的成员? JSON.NET设置有MissingMemberHandling属性,但我看不到如何处理它,并以某种方式返回正确的类反序列化 –