C#中如何通过Steam游戏名称获取对应完整App对象
如何通过Steam API根据游戏名称获取对应的App ID和完整对象
你之前觉得反序列化无效是个误区——Steam API返回的JSON结构是固定的,完全可以用类来映射,反而比手动解析JSON更可靠。下面是具体实现步骤(以C#为例,其他语言逻辑类似):
1. 定义对应JSON结构的类
Steam API返回的JSON层级清晰,只需定义几个简单类完成映射:
public class SteamAppListResponse { public AppListContainer applist { get; set; } } public class AppListContainer { public List<SteamApp> apps { get; set; } } public class SteamApp { public int appid { get; set; } public string name { get; set; } }
2. 请求API并反序列化数据
用HTTP客户端获取API响应,再反序列化为自定义类对象:
using System.Net.Http; using System.Text.Json; var httpClient = new HttpClient(); var response = await httpClient.GetAsync("https://api.steampowered.com/ISteamApps/GetAppList/v2/"); response.EnsureSuccessStatusCode(); // 确保请求成功 var jsonContent = await response.Content.ReadAsStringAsync(); // 反序列化到自定义类 var steamAppData = JsonSerializer.Deserialize<SteamAppListResponse>(jsonContent);
3. 根据游戏名称查找目标对象
可根据需求选择精确或模糊匹配:
- 精确匹配(区分大小写):找到名称完全一致的游戏
var exactMatch = steamAppData.applist.apps.FirstOrDefault(app => app.name == "Warframe"); if (exactMatch != null) { Console.WriteLine($"找到App ID: {exactMatch.appid}, 名称: {exactMatch.name}"); }
- 模糊匹配(忽略大小写):找到名称包含目标关键词的所有游戏
string targetName = "Warframe"; var fuzzyMatches = steamAppData.applist.apps .Where(app => app.name.IndexOf(targetName, StringComparison.OrdinalIgnoreCase) >= 0) .ToList(); foreach (var app in fuzzyMatches) { Console.WriteLine($"App ID: {app.appid}, 名称: {app.name}"); }
关键注意事项
- 该API返回的游戏列表非常庞大(数万条数据),首次请求后务必缓存结果(比如存本地JSON文件或数据库),避免重复调用浪费资源
- 可能存在名称相似甚至相同的游戏(如不同地区版本、测试服),建议返回匹配列表而非单个对象,让用户自行选择
- 匹配时优先使用忽略大小写的逻辑,避免因大小写差异(如"warframe"和"Warframe")找不到目标
内容的提问来源于stack exchange,提问作者willcodes
相关产品推荐
相关产品推荐

