c# - C# 中的 JSON 到 ListView

标签 c# arrays json

我想制作一个应用程序,其中包含我在 Steam 上的游戏列表。我获得了 Steam API key ,并获得了带有游戏数据的 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

最佳答案

您应该使用 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);

fiddle : https://dotnetfiddle.net/Nf2LdB

关于c# - C# 中的 JSON 到 ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58049392/

相关文章:

iphone - 带有 json 反馈的 AFNetworking Post 请求

c# - 使用 Mongodb C# 驱动程序按 ID 字段更新文档

c# - 实现接口(interface)然后调用 Initialize() 函数

javascript - Array() 方法的意外输出

c# - 多维数组列排序

ruby-on-rails - 修改 CURL 请求以将图像上传到 RoR

c# - 保存和还原DataTable的最佳方法C#

c# - 如何禁用 Telerik GridView 行中的特定单元格

javascript - 仅对数组的部分内容进行排序

c# - 将枚举序列化为字符串