Json 对象反序列化为 List

本文关键字:class List 对象 反序列化 Json | 更新日期: 2023-09-27 18:37:26

我有一个包含数组的 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])才能正确反序列化。

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

Json 对象反序列化为 List<class>

您实际上是在尝试反序列化 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
相关文章: