将JSON结果转换为列表<>

时间:2018-03-05 06:11:34

标签: c# asp.net

错误

  

Newtonsoft.Json.JsonSerializationException:'无法反序列化   当前的JSON对象(例如{“name”:“value”})到类型中   'System.Collections.Generic.List`1 [RechargePortal.Models.ProviderOperator]'   因为该类型需要一个JSON数组(例如[1,2,3])来反序列化   正确。要修复此错误,请将JSON更改为JSON数组   (例如[1,2,3])或更改反序列化类型以使其正常   .NET类型(例如,不是整数的基本类型,不是集合   类似于数组或List的类型,可以从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 RESULT

{
   "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; } 
}

2 个答案:

答案 0 :(得分:2)

您应该尝试以下课程:

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);

<强>输出:

enter image description here

答案 1 :(得分:0)

您的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);