反序列化JSON成不同的对象类型与Json.net
问题描述:
的问题是我有不同类型的对象(它知道如何与一个类型处理这个): 事情是这样的:反序列化JSON成不同的对象类型与Json.net
{"myObjects": [
{
"Type":"sampleType1",
"Name":"sampleName1",
"Size":"sampleSize1"
},
{
"Type":"sampleType2",
"Name":"sampleName2",
"Size":"sampleSize2"
}
]
}
我只是处理:
JsonConvert.DeserializeObject<MyObjectContainer>(json);
其中MyObjectContainer有一个属性:
public List<MyObjects> myObjects { get; set; }
Ť他问题来了,当我得到一个对象的可选参数:
{"myObjects": [
{
"Type":"sampleType1",
"Name":"sampleName1",
"Size":"sampleSize1"
},
{
"Type":"sampleType2",
"Name":"sampleName2",
"Size":"sampleSize2",
"AdditionalInfo":"AdditionalInfo"
}
]
}
要序列化它会很容易,我认为。我将使用属性字符串AdditionalInfo创建类AdditionalInfoObject:MyObject。
但如何反序列化这样的json到我的列表?
答
您可以告诉JSON序列化程序忽略该属性,如果该属性为null。但请记住,这只会忽略每个属性都为空的属性。因此,如果使用除此以外的默认值进行初始化,这将不起作用。
下面是一个〔实施例:How to ignore a property in class if null, using json.net
答
你可以尝试像下面的代码。根据你的Json格式,我已经创建了如下所示的淡化类。
public class myObjects
{
public string Type { get; set; }
public string Name { get; set; }
public string Size { get; set; }
public string AdditionalInfo { get; set; }
}
public class objMain
{
public List<myObjects> myObjects { get; set; }
}
之后你可以调用像下面这样的反序列化方法。
注意: - 如果在您的josn中找到AdditionalInfo
属性,那么它会给你这个值,否则它将为空。不需要额外的照顾。
var jsonData = "{ 'myObjects': [{'Type':'sampleType1','Name':'sampleName1','Size':'sampleSize1'},{'Type':'sampleType2','Name':'sampleName2','Size':'sampleSize2'}]}";
string jsonData1 = "{ 'myObjects': [{'Type':'sampleType1','Name':'sampleName1','Size':'sampleSize1'},{'Type':'sampleType2','Name':'sampleName2','Size':'sampleSize2','AdditionalInfo':'AdditionalInfo' }]}";
objMain myNames = JsonConvert.DeserializeObject<objMain>(jsonData);
objMain myNames1 = JsonConvert.DeserializeObject<objMain>(jsonData1);
你能给我另一个提示如何处理它吗? 我只是无法看到我可以如何反序列化我的示例中的第二个json到包含两个不同对象类型(Myobject,AdditionalInfoObject)的某个datacontainer中, – cantdoanything33