【问题标题】:Json Object deserialize to a List<class>Json 对象反序列化为 List<class>
【发布时间】: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])。

如果我将它生成为没有密钥的数组,它可以正常工作。

【问题讨论】:

标签: c# arrays json parsing deserialization


【解决方案1】:

您实际上是在尝试反序列化 JSON 对象,而不是 JSON 数组

请注意,以下将是一个 JSON 数组(您可以将其反序列化为 List&lt;Homework&gt;):

[{
    "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&lt;TKey, TValue&gt;(因为你事先不知道对象的键),在你的例子中是Dictionary&lt;int, Homework&gt;

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

【讨论】:

  • 感谢马蒂亚斯的回答。我明白了 Json 数组和字典的意思。我找到了一个解决方案,它可以正常工作。我已经尝试了一个多小时没有解决方案,再次感谢!
猜你喜欢
  • 2016-10-08
  • 1970-01-01
  • 1970-01-01
  • 2021-11-12
  • 2018-10-06
  • 2014-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多