为字符串数组 属性 声明 "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[]>();