为字符串数组 属性 声明 "Nullable<string>[]" 或 "string[]?",可能存在也可能不存在 class?
Declare "Nullable<string>[]" or "string[]?" for string array property that may or may not exist inside a class?
我有一个这样的 JSON 文件:
[
{
"Id": 1,
"Size": "big",
"Order": 6
},
{
"Id": 2,
"Size": "small",
"Order": 4
},
{
"Id": 3,
"Size": "medium",
"Order": 2,
"chips": []
}
]
筹码属性是一个数组,可能会出现也可能不会出现在某些对象中(目前它是空的)。我是否应该像这样为 json 文件声明 class:
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);
打印输出将是 false
。
所以,可以null
不加修饰
回到你的样本。您还需要指定设置器才能反序列化给定的 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 to parse it first and then convert it to Settings
via the ToObject
(1):
var json = "[\r\n {\r\n \"Id\": 1,\r\n \"Size\": \"big\",\r\n \"Order\": 6\r\n },\r\n {\r\n \"Id\": 2,\r\n \"Size\": \"small\",\r\n \"Order\": 4\r\n },\r\n {\r\n \"Id\": 3,\r\n \"Size\": \"medium\",\r\n \"Order\": 2,\r\n \"chips\": []\r\n }\r\n]";
var semiParsedData = JArray.Parse(json);
var settings = semiParsedData.ToObject<Settings[]>();
我有一个这样的 JSON 文件:
[
{
"Id": 1,
"Size": "big",
"Order": 6
},
{
"Id": 2,
"Size": "small",
"Order": 4
},
{
"Id": 3,
"Size": "medium",
"Order": 2,
"chips": []
}
]
筹码属性是一个数组,可能会出现也可能不会出现在某些对象中(目前它是空的)。我是否应该像这样为 json 文件声明 class:
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);
打印输出将是 false
。
所以,可以null
不加修饰
回到你的样本。您还需要指定设置器才能反序列化给定的 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 to parse it first and then convert it to Settings
via the ToObject
(1):
var json = "[\r\n {\r\n \"Id\": 1,\r\n \"Size\": \"big\",\r\n \"Order\": 6\r\n },\r\n {\r\n \"Id\": 2,\r\n \"Size\": \"small\",\r\n \"Order\": 4\r\n },\r\n {\r\n \"Id\": 3,\r\n \"Size\": \"medium\",\r\n \"Order\": 2,\r\n \"chips\": []\r\n }\r\n]";
var semiParsedData = JArray.Parse(json);
var settings = semiParsedData.ToObject<Settings[]>();