JSON.NET地图元素收集



我得到一个看起来如下的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和legue_id_x。

都有或多或少无限的元素。但是由于不是映射为列表,但我不确定如何将它们映射到我的.NET对象中。

我可以创建每种成员的一百个成员,但这并不是特别好。最好是将它们映射到某种类型的集合中,但是我不知道该如何完成或是否可能。

任何想法如何做?

编辑:我无法控制我得到的JSON对象,这是对Steamwebapi的调用

您可以使用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; }
}

然后,您可以通过枚举其他Data属性来检查联盟和球员ID的属性。

我认为您可以将其转换为字典对象并访问数据。

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_idleague_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
      }
    }
]

在一个完美的世界中,您将控制您收到的JSON结构,并且可以使其看起来像这样

..."league_id" [['1803','1886','1936']]... 

而不是您继续进行的那个loague_id_x的事情,但我不知道您是否得到了控制。

另一方面,您可以使用动态变量:

dynamic jsonDe = JsonConvert.DeserializeObject(json);

,但也有许多倒台。

相关内容

  • 没有找到相关文章

最新更新