为什么在 json 字符串中添加 [ ] 有效以及为什么它之前不起作用



下面是我的json字符串,它存在于.txt文件中,

{"SerialNumber":"1","Festival":"New Year","Day":"Friday"}

当我尝试从代码隐藏 (C#( 文件中通过以下行使用它时

List<PublicHolidayObj> items = JsonConvert.DeserializeObject<List<PublicHolidayObj>>(json);

我收到错误(将 json 刺反序列化为通用列表(,但后来我在 json 中添加了一个 [ ] ,它起作用了,我可以看到名称:值被填充在列表中。

例:

[{"SerialNumber":"1","Festival":"New Year","Day":"Friday"}]

那么 json 字符串是否必须始终是一个数组才能被 C# 列表对象使用?在添加 [ ] 和没有它之前,我无法区分差异。

很简单,你的第一个JSON代表一个对象。第二个 JSON 表示具有单个元素的数组。

不能将单个元素反序列化为列表,因为它不是列表。

您应该能够将第一个 JSON 反序列化为单个对象,如下所示:

PublicHolidayObj item = JsonConvert.DeserializeObject<PublicHolidayObj>(json);

那么 json 字符串是否必须始终是一个数组才能被 C# 列表对象使用?

是的,您不能将单个对象视为列表,因为它不是列表 - 就像您不希望编译此代码一样:

PublicHolidayObj item = new PublicHolidayObj();
// This won't compile, because a single item isn't a list of items.
List<PublicHolidayObj> items = item;

通过添加[],您已经创建了一个 JSON 数组,这就是为什么它会反序列化为列表的原因。

singleItem = {"SerialNumber":"1","Festival":"New Year","Day":"Friday"}
array = [
{"SerialNumber":"1","Festival":"New Year","Day":"Friday"},
{"SerialNumber":"2","Festival":"Christmas","Day":"Thursday"}
]

通常 json 以{}(大括号(开头,但这里就像[](方括号(。

这是因为您得到了一个对象数组,而不是单个对象。数组是序列化的,它们周围有方括号。您应该将其反序列化为数组,然后在感兴趣的索引处获取对象。

相关内容

最新更新