声明“Nullable<string>[]”或“string[]?”对于可能存在或不存在于类中的字符串数组属性?
Posted
技术标签:
【中文标题】声明“Nullable<string>[]”或“string[]?”对于可能存在或不存在于类中的字符串数组属性?【英文标题】:Declare "Nullable<string>[]" or "string[]?" for string array property that may or may not exist inside a class? 【发布时间】:2021-04-20 05:55:23 【问题描述】:我有一个这样的 JSON 文件:
[
"Id": 1,
"Size": "big",
"Order": 6
,
"Id": 2,
"Size": "small",
"Order": 4
,
"Id": 3,
"Size": "medium",
"Order": 2,
"chips": []
]
chips 属性是一个数组,它可能出现在某些对象中,也可能不出现(此时它为空)。我应该像这样声明 json 文件的类吗:
public class Settings
public int Id get;
public string Size get;
public int Order get;
public string[]? Chips get;
与 ?还是类似 Nullable[] 之类的属性?
【问题讨论】:
你试过了吗?您只能将 Nullabletype?[]
vs type[]?
vs type[]
的问题,像这样***.com/questions/54010316/…?
@Mik 是的,你不需要需要可为空的引用类型,但如果你想声明一个数组可以为空,请使用string[]?
。
【参考方案1】:
简而言之:在这种情况下,您根本不需要 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 对其进行解析,然后通过ToObject
(1) 将其转换为Settings
:
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[]>();
【讨论】:
以上是关于声明“Nullable<string>[]”或“string[]?”对于可能存在或不存在于类中的字符串数组属性?的主要内容,如果未能解决你的问题,请参考以下文章