【问题标题】:How do i get multiple single objects in a json converted into a C# object list?如何将 json 中的多个单个对象转换为 C# 对象列表?
【发布时间】:2016-03-09 13:07:45
【问题描述】:

我正在尝试使用英雄联盟 API 制作程序。 API 不返回对象数组。每个冠军都有不同的对象。我的问题是,我怎样才能将这些对象放入 C# 列表中,而不必为 C# 中的每个冠军创建一个对象? https://global.api.pvp.net/api/lol/static-data/euw/v1.2/champion?api_key=362039df-6ce4-4e2f-ac3c-27d246d03f45 (这是我得到的 json 列表) 我有以下代码来转换对象,但显然它无法填充列表。

var webclient = new WebClient();
var strJson = webclient.DownloadString("https://global.api.pvp.net/api/lol/static-data/euw/v1.2/champion?api_key=362039df-6ce4-4e2f-ac3c-27d246d03f45");
var List<ChampionJson> = JsonConvert.DeserializeObjectList<<ChampionJson>>(strJson);

这是冠军班:

public class ChampionJson
{
    public Champion champion { get; set; }
}

public class Champion
{
    [JsonProperty("id")]
    public int id { get; set; }
    [JsonProperty("key")]
    public string key { get; set; }
    [JsonProperty("name")]
    public string name { get; set; }
    [JsonProperty("title")]
    public string title { get; set; }
}

我知道我在做什么可能完全错误,但我对 Json 很陌生。过去两天我一直试图让它工作,但我在互联网上找不到任何东西。 请帮忙, 提前致谢!

【问题讨论】:

  • 请在您的问题中包含您尝试反序列化的 JSON 示例,并详细说明您的代码为何无法正常工作 - “它无法填充列表”不是很具有描述性。
  • 显然你需要创建与json响应中的值相同数量的对象。

标签: c# json api


【解决方案1】:

您的对象基本上需要反映 JSON 提供的模型。你离得很近;我会将 ChampionJson 对象定义更改为:

public class ChampionJson { public Dictionary<string, Champion> data { get; set; } }

然后使用

JsonConvert.DeserializeObject<ChampionJson>(strJson) 

而不是

JsonConvert.DeserializeObjectList<<ChampionJson>>(strJson)

【讨论】:

  • 每当我需要写一些手头的东西并想要验证时,我都会使用dotnetfiddle.net。您甚至可以通过 nuget 包含软件包。只是一个提示。
  • @Default 我什至不知道它存在。我真的很感激!谢谢! - 测试了我的答案,它有效:)
  • 我按照你的解释做了,它没有给 var Champion 任何数据,它只有空值
  • 您是否将 ChampionJson 中的 Dictionary 属性重命名为“数据”,正如我所写的那样?如果是,您可以编辑您的问题并粘贴您更改的代码吗?
  • 这是一个 dotnetfiddle,您的代码可以正常工作(感谢@Default)dotnetfiddle.net/nS9qXh
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-04
  • 1970-01-01
相关资源
最近更新 更多