【问题标题】:Convert JSON Result to list<>将 JSON 结果转换为列表<>
【发布时间】:2018-03-05 06:11:33
【问题描述】:

错误

Newtonsoft.Json.JsonSerializationException: '无法反序列化 当前 JSON 对象(例如 {"name":"value"})转换为类型 'System.Collections.Generic.List`1[RechargePortal.Models.ProviderOperator]' 因为该类型需要一个 JSON 数组(例如 [1,2,3])来反序列化 正确。要修复此错误,请将 JSON 更改为 JSON 数组 (例如 [1,2,3])或更改反序列化类型,使其成为正常的 .NET 类型(例如,不是像整数这样的原始类型,也不是集合 可以从 JSON 反序列化的数组或列表等类型 目的。 JsonObjectAttribute 也可以添加到类型中来强制它 从 JSON 对象反序列化。路径“提供者”,第 1 行,位置 13.'

List<ProviderOperator> GetProvideOperator(string service)
{
    string json = new System.Net.WebClient().DownloadString("URL");
    List<ProviderOperator> ob = new List<ProviderOperator>();
    ob = JsonConvert.DeserializeObject<List<ProviderOperator>>(json);
    ob = ob.Where(x => x.Service.Equals(service)).ToList();
    return ob;
}

JSON 结果

{
   "providers":[
      {
         "provider_id":0,
         "provider_name":"PAY2ALL",
         "provider_code":"PAY2ALL",
         "service_id":10,
         "service":"Pay2All Cash",
         "provider_image":"",
         "status":"Success"
      },
      {
         "provider_id":1,
         "provider_name":"AIRTEL",
         "provider_code":"A",
         "service_id":1,
         "service":"Recharge",
         "provider_image":"provider_icons\/airtel.png",
         "status":"Success"
      },
      {
         "provider_id":2,
         "provider_name":"VODAFONE",
         "provider_code":"V",
         "service_id":1,
         "service":"Recharge",
         "provider_image":"provider_icons\/vodafone.png",
         "status":"Success"
      }
   ]
}

型号

public class ProviderOperator 
{ 
    public string Provider_id { get; set; } 
    public string Provider_name { get; set; } 
    public string Provider_code { get; set; } 
    public string Service { get; set; } 
    public string Provider_image { get; set; } 
    public string Status { get; set; } 
}

【问题讨论】:

  • 你的 json 不是一个列表,它是一个包含列表的对象
  • 您可以使用一些在线工具来确保正确地将 JSON 转换为 C#:json2csharp.com

标签: c# asp.net


【解决方案1】:

您应该尝试以下课程:

public class ProviderOperator
{
    public List<Provider> providers { get; set; }
}

public class Provider
{
    public int provider_id { get; set; }
    public string provider_name { get; set; }
    public string provider_code { get; set; }
    public int service_id { get; set; }
    public string service { get; set; }
    public string provider_image { get; set; }
    public string status { get; set; }
}

var ob = JsonConvert.DeserializeObject<ProviderOperator>(json);

输出:

【讨论】:

    【解决方案2】:

    您的 Json 结果采用不同的格式和您使用的类结构 解析 json 的格式不同。 您需要创建两个单独的类,如下所示

    类结构

     public class ProviderOperator
      {
            public List<ProviderInfo> providers { get; set; }
      }
     public class ProviderInfo
      {
            public int provider_id { get; set; }
            public string provider_name { get; set; }
            public string provider_code { get; set; }
            public int service_id { get; set; }
            public string service { get; set; }
            public string provider_image { get; set; }
            public string status { get; set; }
       }
    

    解析响应

    var result = JsonConvert.DeserializeObject<ProvderOperator>(json);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-10
      • 2015-02-15
      • 2023-03-25
      • 1970-01-01
      • 2018-10-08
      • 2018-02-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多