我想制作一个应用程序,其中包含我在 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/