问题是我有不同类型的对象(它知道如何使用一种类型处理它): 像这样:
{"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反序列化到我的列表中?
答案 0 :(得分:0)
如果属性为null,则可以告诉JSON Serializer忽略该属性。但请注意,这将忽略每个属性为null的属性。因此,如果使用除此之外的默认值进行初始化,则无法正常工作。
这是一个例子:How to ignore a property in class if null, using json.net
答案 1 :(得分:0)
您可以尝试以下代码。根据你的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
属性,那么它将为您提供其他值,它将为null。无需额外的照顾。
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);