假设我有以下json字符串,其中一些属性名称为differes(“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;
}
换句话说,我如何根据属性的名称处理反序列化。
答案 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
和GenericB
,而无需两次使用同一属性。