这是JSON
[
{
"name": "TeamA",
"zone": "North",
"id": 12,
"players": [
{
"name": "TAPlayer1",
"type": "Keeper"
},
{
"name": "TAPlayer2",
"type": "Bowler"
}
]
},
{
"name": "TeamB",
"zone": "South",
"id": 20,
"players": [
{
"name": "TBPlayer1",
"type": "Keeper"
}
]
},
{
"name": "TeamC",
"zone": "South",
"id": 45,
"players": null
},
{
"name": "TeamD",
"zone": "North",
"id": 40,
"players": [
{
"name": "Tom",
"type": "Keeper"
},
{
"name": "Max",
"type": "Keeper"
},
{
"name": "Sam",
"type": "Bowler"
},
{
"name": "Jim",
"type": "Keeper"
}
]
}
]
我想要这样的结果(按区域分组,球员类型守门员)
North
TAPlayer1
Tom
Max
South
TBPlayer1
我试着这样解析
public class Player
{
public string name { get; set; }
public string type { get; set; }
}
public class Teams
{
public string name { get; set; }
public string zone { get; set; }
public int id { get; set; }
public List<Player> players { get; set; }
}
Teams[] ownersArray = JsonConvert.DeserializeObject<Teams[]>(json);
我想按区域分组显示结果,类型应该是 keeper。如有任何建议,我们将不胜感激。
提前致谢。
最佳答案
反序列化JSON后
Teams[] teams = JsonConvert.DeserializeObject<Teams[]>(json);
您可以使用 LINQ 按区域分组
var groupedByZone = teams.Where(t => t.players != null).GroupBy(t => t.zone);
我们希望从每个组中获得球员
var players = groupedByZone.Select(g => new {
name = g.Key,
players = g.SelectMany(t => t.players).Where(p => p.type == "Keeper").ToArray()
});
这一切都可以在一条语句中完成
var keepersByZone = teams.Where(t => t.players != null)
.GroupBy(team => team.zone)
.Select(g => new {
name = g.Key,
players = g.SelectMany(team => team.players)
.Where(player => plapyer.type == "Keeper")
.OrderBy(player => player.name)
.ToArray()
});
显示输出
foreach(var zone in keepersByZone) {
Console.WriteLine(zone.name);
foreach(var player in zone.players) {
Console.WriteLine(player.name);
}
Console.WriteLine();
}
关于C# 按类型解析 JSON 组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45301168/