我有一个包含数组的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数组。
请注意,以下是 JSON数组(您可以将其反序列化为List<Homework>
):
[{
"ID": "2",
"Subject": "Danish",
"Message": "Message",
"DateEnd": "2016-02-28 00:00:00"
},
{
"ID": "2",
"Subject": "Math",
"Message": "Message",
"DateEnd": "2016-02-29 00:00:00"
}]
为了反序列化此 JSON对象,您必须使用Dictionary<TKey, TValue>
(因为您事先不知道对象的密钥),在您的情况下是Dictionary<int, Homework>
:
Dictionary<int, Homework> homeworks = JsonConvert.DeserializeObject<Dictionary<int, Homework>>(json);
Homework hw = homeworks[0]; //This will be your first homework, the one with ID = 2