【发布时间】:2016-03-05 13:48:05
【问题描述】:
我有一个 Json 字符串,其中包含数组和一个带有值的键,如下所示。
{
"MSG": "Hallo Stackoverflow!",
"0": {
"ID": "2",
"Subject": "Danish",
"Message": "Message",
"DateEnd": "2016-02-28 00:00:00"
},
"1": {
"ID": "2",
"Subject": "Math",
"Message": "Message",
"DateEnd": "2016-02-29 00:00:00"
}}
我将它传递给 JObject 以获取 MSG 值,然后将其从 json 中删除。但是,当密钥消失时,数组的数字被删除,我无法通过我的代码传递它:
JObject data = JObject.Parse(json);
string MSG = data["MSG"].ToString();
data.Remove("MSG");
List<HomeWork> homework = JsonConvert.DeserializeObject<List<HomeWork>>(json);
我收到一个错误:
Newtonsoft.Json.JsonSerializationException:无法将当前 JSON 对象(例如 {"name":"value"})反序列化为类型“System.Collections.Generic.List`1[Memento.HomeWork]”,因为该类型需要正确反序列化的 JSON 数组(例如 [1,2,3])。
如果我将它生成为没有密钥的数组,它可以正常工作。
【问题讨论】:
-
堆栈跟踪告诉您以 '0'、'1'、... 作为键的 JSON 对象与 JSON 数组不同。您可能应该将您的收藏视为字典。
标签: c# arrays json parsing deserialization