C#将多个JSON集合反序列化为一个列表<;T>;
我从web api获取同一对象的集合。 然后我想将JSON反序列化为一个列表 JSON如下所示:C#将多个JSON集合反序列化为一个列表<;T>;,c#,json,deserialization,C#,Json,Deserialization,我从web api获取同一对象的集合。 然后我想将JSON反序列化为一个列表 JSON如下所示: { "Liverpool": [ { "playerId": "LIV01", "name": "Adam Llana", "position": "Midfielder" }, { "playerId": "LIV02", "name": "Daniel Sturridge", "position"
{
"Liverpool": [
{
"playerId": "LIV01",
"name": "Adam Llana",
"position": "Midfielder"
},
{
"playerId": "LIV02",
"name": "Daniel Sturridge",
"position": "Forward"
}
],
"ManchesterUnited": [
{
"playerId": "MNU01",
"name": "Daley Blind",
"position": "Defender"
},
{
"playerId": "MNU02",
"name": "Romelu Lukaku",
"position": "Forward"
}
],
"Arsenal": [
{
"playerId": "ARS01",
"name": "Petr Cech",
"position": "Goalkeeper"
},
{
"playerId": "ARS02",
"name": "Santi Cazorla",
"position": "Midfielder"
}
]
}
由于我对收藏名称不感兴趣,我希望能够做到以下几点:
public class Player
{
public string playerId { get; set; }
public string name { get; set; }
public string position { get; set; }
}
List<Player> cards = JsonConvert.DeserializeObject<List<Player>>(jsonContent);
公共类播放器
{
公共字符串播放器ID{get;set;}
公共字符串名称{get;set;}
公共字符串位置{get;set;}
}
列表卡=JsonConvert.DeserializeObject(jsonContent);
这不起作用并产生错误
无法反序列化当前JSON对象(例如{“name\”:\“value\”})
进入类型“System.Collections.Generic.List`1[Player]”,因为该类型
需要JSON数组(例如[1,2,3])才能正确反序列化。修理
此错误或者将JSON更改为JSON数组(例如[1,2,3]),或者
更改反序列化类型,使其成为正常的.NET类型(例如。
不是integer之类的基元类型,也不是数组之类的集合类型
可以从JSON对象反序列化的。
还可以将JsonObjectAttribute添加到类型以强制其
从JSON对象反序列化
使用Newtonsoft.Json有什么方法可以做到这一点吗?如果您现在只是尝试为玩家创建一个对象,它将无法工作,因为团队名称是唯一的。要反序列化的类应如下所示:
public class Teams
{
public Liverpool[] Liverpool { get; set; }
public Manchesterunited[] ManchesterUnited { get; set; }
public Arsenal[] Arsenal { get; set; }
}
public class Liverpool
{
public string playerId { get; set; }
public string name { get; set; }
public string position { get; set; }
}
public class Manchesterunited
{
public string playerId { get; set; }
public string name { get; set; }
public string position { get; set; }
}
public class Arsenal
{
public string playerId { get; set; }
public string name { get; set; }
public string position { get; set; }
}
现在可以直接将数据反序列化到此对象
Teams teams = JsonConvert.DeserializeObject<Teams>(jsonContent);
Teams=jsoninvert.DeserializeObject(jsonContent);
在顶部的文件菜单中的编辑选项中有一个名为粘贴特殊的选项,该选项允许您创建模仿json或xml属性的类,因为您需要将变量团队名称反序列化到
字典
。在字典的值上使用选择many
,以获取玩家
public class Player
{
public string playerId { get; set; }
public string name { get; set; }
public string position { get; set; }
}
var teams = JsonConvert.DeserializeObject<Dictionary<string, List<Player>>>(jsonContent);
List<Player> players = teams.SelectMany(kvp => kvp.Value).ToList();
公共类播放器
{
公共字符串播放器ID{get;set;}
公共字符串名称{get;set;}
公共字符串位置{get;set;}
}
var teams=jsoninvert.DeserializeObject(jsonContent);
列出玩家=团队。选择许多(kvp=>kvp.Value)。ToList();
您想要的是将该对象反序列化为字典:
var teams = JsonConvert.DeserializeObject<Dictionary<string, List<Player>>>(jsonContent);
var allPlayers = teams.SelectMany(entry => entry.Value);
如果OP有1000个团队需要反序列化呢?如果他们的名字事先不知道怎么办?如果将来将新属性添加到
播放器
,该怎么办?是的,这是此实现的一个问题。感谢您强调此问题。