【问题标题】:JSON to ListView in C#C# 中的 JSON 到 ListView
【发布时间】:2019-09-22 12:51:11
【问题描述】:

我想在我的 Steam 游戏列表中制作应用程序。我获得了 Steam API 密钥,并获得了带有游戏数据的 JSON,但我不知道如何将其发送到我的 ListView 或类似的东西。

我正在尝试查找一些教程,并使用 Newtonsoft.JSON 找到,但我仍然遇到错误。

JSON 的外观:

{
   "response":{
      "game_count":27,
      "games":[
         {
            "appid":730,
            "name":"Counter-Strike: Global Offensive",
            "playtime_2weeks":986,
            "playtime_forever":30571,
            "img_icon_url":"69f7ebe2735c366c65c0b33dae00e12dc40edbe4",
            "img_logo_url":"d0595ff02f5c79fd19b06f4d6165c3fda2372820",
            "has_community_visible_stats":true,
            "playtime_windows_forever":1600,
            "playtime_mac_forever":0,
            "playtime_linux_forever":0
         },
         {
            "appid":224260,
            "name":"No More Room in Hell",
            "playtime_forever":0,
            "img_icon_url":"684de0d9c5749b5ddd52f120894fd97efd620b1d",
            "img_logo_url":"670e9aba35dc53a6eb2bc686d302d357a4939489",
            "has_community_visible_stats":true,
            "playtime_windows_forever":0,
            "playtime_mac_forever":0,
            "playtime_linux_forever":0
         },
         {
            "appid":232010,
            "name":"Euro Truck Simulator",
            "playtime_forever":11,
            "img_icon_url":"6b1bb4a4e2b1e0d85ad0b3e2d6d15a0258aa43a0",
            "img_logo_url":"fa3886315d9586671506c7149c1e4ecae653ce13",
            "has_community_visible_stats":true,
            "playtime_windows_forever":0,
            "playtime_mac_forever":0,
            "playtime_linux_forever":0
         }
      ]
   }
}

我尝试了这个,但它不起作用。

json = wc.DownloadString("http://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key=D4718FA8ED43C531523CF79310BE52FE&steamid=76561198440001695&include_appinfo=1");
dynamic results = JsonConvert.DeserializeObject(json);
var appid = results.appid();

我得到错误:

  • $exception {“组件“Newtonsoft.Json.Linq.JObject”不包含定义“appid”。”} Microsoft.CSharp.RuntimeBinder.RuntimeBinderException

【问题讨论】:

标签: c# arrays json


【解决方案1】:

你应该使用 Newtonsoft 的通用反序列化方法反序列化这个字符串。

尝试创建一个新课程:

 public partial class GameResponse
{
    [JsonProperty("response")]
    public Response Response { get; set; }
}

public partial class Response
{
    [JsonProperty("game_count")]
    public long GameCount { get; set; }

    [JsonProperty("games")]
    public Game[] Games { get; set; }
}

public partial class Game
{
    [JsonProperty("appid")]
    public long Appid { get; set; }

    [JsonProperty("name")]
    public string Name { get; set; }

    [JsonProperty("playtime_2weeks", NullValueHandling = NullValueHandling.Ignore)]
    public long? Playtime2Weeks { get; set; }

    [JsonProperty("playtime_forever")]
    public long PlaytimeForever { get; set; }

    [JsonProperty("img_icon_url")]
    public string ImgIconUrl { get; set; }

    [JsonProperty("img_logo_url")]
    public string ImgLogoUrl { get; set; }

    [JsonProperty("has_community_visible_stats")]
    public bool HasCommunityVisibleStats { get; set; }

    [JsonProperty("playtime_windows_forever")]
    public long PlaytimeWindowsForever { get; set; }

    [JsonProperty("playtime_mac_forever")]
    public long PlaytimeMacForever { get; set; }

    [JsonProperty("playtime_linux_forever")]
    public long PlaytimeLinuxForever { get; set; }
}

然后使用:

var json = wc.DownloadString("http://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key=D4718FA8ED43C531523CF79310BE52FE&steamid=76561198440001695&include_appinfo=1");
var results = JsonConvert.DeserializeObject<GameResponse>(json);

小提琴: https://dotnetfiddle.net/Nf2LdB

【讨论】:

猜你喜欢
  • 2014-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-22
  • 1970-01-01
  • 2015-05-03
  • 1970-01-01
相关资源
最近更新 更多