下面是我的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 以
{}
(大括号(开头,但这里就像[]
(方括号(。
这是因为您得到了一个对象数组,而不是单个对象。数组是序列化的,它们周围有方括号。您应该将其反序列化为数组,然后在感兴趣的索引处获取对象。