解析期间出现JSON错误

时间:2015-01-08 12:11:04

标签: c# json

一直在寻找有关如何解析这个json的信息,但是我尝试的一切都失败了。

我正在尝试使用以下代码解析JSON:

var client = new WebClient();
client.Headers.Add("User-Agent", "Nobody");
var response = client.DownloadString(new Uri("https://api.worldoftanks.ru/wot/encyclopedia/tanks/?application_id=demo"));
Response asd = JsonConvert.DeserializeObject<Response>(response);

我还在不同的文件中设置了这些类:

public class Response
{
    public string status { get; set; }
    public int count { get; set; }
    public List<Tank> data { get; set; }
}

public class Tank
{
    public string nation_i18n { get; set; }
    public string name { get; set; }
    public int level { get; set; }
    public string image { get; set; }
    public string image_small { get; set; }
    public string nation { get; set; }
    public bool is_premium { get; set; }
    public string type_i18n { get; set; }
    public string contour_image { get; set; }
    public string short_name_i18n { get; set; }
    public string name_i18n { get; set; }
    public string type { get; set; }
    public int tank_id { get; set; }
}

它们与URL返回的数据相同(请打开它,您将看到它是如何构建的)

我认为出现的一个问题是,如果没有响应的“数据”标记,而是为每个坦克标记“坦克”,他们实际上将其命名为个人ID。 (再次,请参阅URL示例)

有人可以帮帮我吗? 目前我收到错误:

  

发生了'Newtonsoft.Json.JsonSerializationException'类型的未处理异常   Newtonsoft.Json.dll        附加信息:无法将当前JSON对象(例如{“name”:“value”})反序列化为类型   'System.Collections.Generic.List`1 [WotApp.Classes.Tank]'因为   type需要一个JSON数组(例如[1,2,3])才能正确反序列化。        要修复此错误,请将JSON更改为JSON数组(例如[1,2,3])或更改反序列化类型,以使其成为正常的.NET   type(例如,不是像整数这样的基本类型,不是集合类型   像数组或List一样,可以从JSON对象反序列化。   JsonObjectAttribute也可以添加到类型中以强制它   从JSON对象反序列化。        路径'data.1',第1行,第39位。

希望你的帮助。多年来我一直坚持这个:(

1 个答案:

答案 0 :(得分:1)

还在寻找和控制台应用程序测试的答案,@ Alexander和@dotctor的评论实际上是正确答案;)所以你的课程必须看起来像这样:

public class Response
{
  public string status { get; set; }
  public int count { get; set; }
  public Dictionary<String, Tank> data { get; set; }
}

Here is another SO question处理完全相同的问题。

我的节目列表:

namespace SO27839862
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                WebClient client = new WebClient();
                client.Headers.Add("User-Agent", "Nobody");

                String response = client.DownloadString(new Uri("https://api.worldoftanks.ru/wot/encyclopedia/tanks/?application_id=demo"));
                Response asd = JsonConvert.DeserializeObject<Response>(response);
            }
            catch (Exception ex)
            {

            }
        }
    }

    public class Response
    {
        public string status { get; set; }
        public int count { get; set; }
        public Dictionary<String, Tank> data { get; set; }
    }

    public class Tank
    {
        public string nation_i18n { get; set; }
        public string name { get; set; }
        public int level { get; set; }
        public string image { get; set; }
        public string image_small { get; set; }
        public string nation { get; set; }
        public bool is_premium { get; set; }
        public string type_i18n { get; set; }
        public string contour_image { get; set; }
        public string short_name_i18n { get; set; }
        public string name_i18n { get; set; }
        public string type { get; set; }
        public int tank_id { get; set; }
    }
}