简而言之:在这种情况下根本不需要
我有一个JSON文件,如下所示:
[
{
"Id": 1,
"Size": "big",
"Order": 6
},
{
"Id": 2,
"Size": "small",
"Order": 4
},
{
"Id": 3,
"Size": "medium",
"Order": 2,
"chips": []
}
]
chips属性是一个数组,它可能出现在某个对象中,也可能不出现在该对象中(目前为null(。我应该这样声明json文件的类吗:
public class Settings
{
public int Id { get;}
public string Size { get;}
public int Order { get;}
public string[]? Chips { get;}
}
和?或者类似Nullable[]的属性?
Nullable<T>
或?
。
string[]
是参考类型:
Console.WriteLine(typeof(string[]).IsValueType);
打印输出将是CCD_ 4。
因此,它可以是null
,而不需要任何装饰。
返回您的样本。您还需要指定setter,以便能够反序列化给定的json片段:
public class Settings
{
public int Id { get; set; }
public string Size { get; set; }
public int Order { get; set; }
public string[] Chips { get; set; }
}
因为顶级实体不是对象,所以需要首先使用JArray解析它,然后通过ToObject
(1(:将其转换为Settings
var json = "[rn {rn "Id": 1,rn "Size": "big",rn "Order": 6rn },rn {rn "Id": 2,rn "Size": "small",rn "Order": 4rn },rn {rn "Id": 3,rn "Size": "medium",rn "Order": 2,rn "chips": []rn }rn]";
var semiParsedData = JArray.Parse(json);
var settings = semiParsedData.ToObject<Settings[]>();