使用JSON解析.NET反序列化()与嵌套的“列表”
问题描述:
编辑:简化类使用JSON解析.NET反序列化()与嵌套的“列表”
{
"name": "Final Five",
"bio": null,
"noPlayers": "0",
"roster": {
"players0": {
"playerId": "3516",
"name": "Gate",
"role": "Mid Lane",
"isStarter": 1
},
"players1": {
"playerId": "3826",
"name": "Veritas",
"role": "AD Carry",
"isStarter": 1
},
"players2": {
"playerId": "4054",
"name": "Novel",
"role": "Support",
"isStarter": 1
},
"players3": {
"playerId": "4142",
"name": "Wizardry",
"role": "Top Lane",
"isStarter": 0
},
"players4": {
"playerId": "4555",
"name": "Metroid",
"role": "Jungler",
"isStarter": 0
},
"players5": {
"playerId": "4554",
"name": "Chau",
"role": "Jungler",
"isStarter": 0
},
"players6": {
"playerId": "3847",
"name": "Biofrost",
"role": "Support",
"isStarter": 0
}
},
"logoUrl": "http://riot-web-cdn.s3-us-west-1.amazonaws.com/lolesports/s3fs-public/final-five-logo.png",
"profileUrl": "http://na.lolesports.com/node/3498",
"teamPhotoUrl": "http://na.lolesports.com/",
"acronym": "F5"
}
我已经被我的端接收到这个JSON。我遇到的问题是试图将球员解析为列表而不是个人元素,因为球员的数量可能会有所不同。我试过使用数组和列表。这是我已经设置了类
public class Player
{
public string playerId { get; set; }
public string name { get; set; }
public string role { get; set; }
public int isStarter { get; set; }
}
public class Roster
{
public Player players0 { get; set; }
public Player players1 { get; set; }
public Player players2 { get; set; }
public Player players3 { get; set; }
public Player players4 { get; set; }
public Player players5 { get; set; }
public Player players6 { get; set; }
}
public class Team
{
public string name { get; set; }
public object bio { get; set; }
public string noPlayers { get; set; }
public Roster roster { get; set; }
public string logoUrl { get; set; }
public string profileUrl { get; set; }
public string teamPhotoUrl { get; set; }
public string acronym { get; set; }
}
这是我的反序列化:
Team team = new JavaScriptSerializer().Deserialize<Team>(responseText);
答
一种可能性是反序列化到一个动态对象,并从转换到你的强类型对象。像这样:
var dict = new JavaScriptSerializer().Deserialize<dynamic>(responseText);
所得dict
对象是一个字典,以表示为在字典中的名称 - 值对每个属性。嵌套对象,如roster
和其所含的playersX
对象本身表示为字典。
因此,举例来说,你会得到的player1
对象的name
属性,像这样:
Assert.AreEqual("Veritas", dict["roster"]["players1"]["name"]);
如果有帮助的一切,你可以只作roster
财产dynamic
,像这样:
public class Team
{
public string name { get; set; }
public object bio { get; set; }
public string noPlayers { get; set; }
public dynamic roster { get; set; }
public string logoUrl { get; set; }
public string profileUrl { get; set; }
public string teamPhotoUrl { get; set; }
public string acronym { get; set; }
}
那么只有属性将被反序列化词典的词典。
请显示您一直在尝试的反序列化代码。 –
你为什么不能尝试这样的事情,例如 '名单数据= JsonConvert.DeserializeObject >(jsonString);'做简单的谷歌搜索以及太 –
MethodMan
@MethodMan:显然,它不是那么简单 –