我得到一个类似于以下内容的json对象。
{
"result": {
"status": 1,
"teams": [
{
"team_id": 1838315,
"name": "Team Secret",
"tag": "Secret",
"time_created": 1408993713,
"rating": "inactive",
"logo": 543025270456493060,
"logo_sponsor": 540768028333677400,
"country_code": "",
"url": "http://www.teamsecret.gg/",
"games_played_with_current_roster": 0,
"player_0_account_id": 41231571,
"player_1_account_id": 73562326,
"player_2_account_id": 82262664,
"player_3_account_id": 86745912,
"player_4_account_id": 87278757,
"admin_account_id": 5390881,
"league_id_0": 1803,
"league_id_1": 1886,
"league_id_2": 1936,
"league_id_3": 1942,
"league_id_4": 2129,
"league_id_5": 2140,
"league_id_6": 2158,
"league_id_7": 2339,
"league_id_8": 2418,
"league_id_9": 2661,
"league_id_10": 2877
}
]
}
}
我想使用Newtonsoft json.net libaray来反序列化该对象。 大部分都很简单,但我不确定如何处理player_X_account_id和league_id_X。
两者都有或多或少无限量的元素。 但由于没有映射为列表而是单个元素,我不确定如何将它们映射到我的.Net对象中。
我可以创造每种类型的一百个成员,但这不会特别好。 我更愿意将它们映射到某种集合,但我不知道如何完成或甚至可能。
知道怎么做吗?
编辑:我无法控制我得到的json对象,它是对SteamWebAPI的调用
答案 0 :(得分:4)
您可以使用extension data feature of JSON.NET:
public class Team
{
public int Team_Id { get; set; }
public string Name { get; set; }
public string Tag { get; set; }
public string Url { get; set; }
//other properties
[JsonExtensionData]
public IDictionary<string, JToken> AdditionalData { get; set; }
}
然后,您可以通过枚举AdditionalData属性来检查联赛和玩家ID的属性。
答案 1 :(得分:0)
在完美的世界中,您可以控制您正在接收的JSON
结构,并且可以使其看起来像这样
..."league_id" [['1803','1886','1936']]...
而不是你继续进行的那个联盟__但是我不知道你是否能控制它。
另一方面,您可以使用动态变量:
dynamic jsonDe = JsonConvert.DeserializeObject(json);
但它也有许多垮台。
答案 2 :(得分:0)
我认为您可以将其转换为字典对象并访问数据。
Dictionary<string, string> values = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);
foreach (KeyValuePair<string, object> data in values)
{
var key=data.key;
var value=data.value;
if(key =="teams")
{
foreach(KeyValuePair<string, object> team in data )
{
//do your stuffs here................
}
}
}
但是,如果您将player_X_account_id
和league_id_X
作为对象保留在对象中,那将对您有好处:
"teams": [
{
your data......,
"players":{
"player_0_account_id": 41231571,
"player_1_account_id": 73562326,
"player_2_account_id": 82262664,
"player_3_account_id": 86745912,
"player_4_account_id": 87278757,
}
"admin_account_id": 5390881,
"league":{
"league_id_0": 1803,
"league_id_1": 1886,
"league_id_2": 1936,
"league_id_3": 1942,
"league_id_4": 2129,
"league_id_5": 2140,
"league_id_6": 2158,
"league_id_7": 2339,
"league_id_8": 2418,
"league_id_9": 2661,
"league_id_10": 2877
}
}
]