反序列化包含数组的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"
}
]
}
您应该更改
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()
};
}