反序列化包含数组的JSON数据

本文关键字:JSON 数据 数组 包含 反序列化 | 更新日期: 2023-09-27 18:19:53

我想反序列化JSON数据,它有三个键,如下所示:Type、Name、data[]

我的Message类,我希望我的JSON被序列化为:

class Message
{
    public int Type;
    public string Name;
    public List<KeyValuePair<string, string>> Data;
}

我能够用这个代码块反序列化Type和Name;

Message DeserializedMessage = JsonConvert.DeserializeObject<Message>(myString);
Console.WriteLine("Name: " + DeserializedMessage.Name);
Console.WriteLine("Type: " + DeserializedMessage.Type); 

但是,我不知道如何将JSON中的键值对反序列化为List<KeyValuePair<string, string>> Data;

示例JSON:

{
    "Type":"103",
    "Name":"Oguzhan",
    "Data":
    [
        {
            "InviteTo":"Bahadir"
        }
    ]
}
{
    "Type":"104",
    "Name":"Oguzhan",
    "Data":
    [
        {
            "Game":"Backgammon",
            "Duration":"2"
        }
    ]
}

反序列化包含数组的JSON数据

您应该更改

public List<KeyValuePair<string, string>> data; 

public List<Dictionary<string, string>> data;

在那之后,它相对容易:

Message message = JsonConvert.DeserializeObject<Message>(jsonString);

或者,如果您想使用dynamic:

dynamic parsed = JsonConvert.DeserializeObject(jsonString);
Message message = MapToMessage(parsed);
// ...
private Message MapToMessage(dynamic json)
{
    return new Message()
    {
        Type = json.Type,
        Name = json.Name,
        Data = ((IEnumerable<dynamic>)json.Data).Select(d =>
        {
            var dic = new Dictionary<string, string>();
            foreach (var v in d) dic.Add(v.Name, v.Value.Value);
            return dic;
         }).ToList()
    };
}