【问题标题】:How to deserialize JSON to .net objects如何将 JSON 反序列化为 .net 对象
【发布时间】:2019-01-27 08:11:13
【问题描述】:

大家好,我是 JSON 反序列化的新手。这是必须反序列化为 .net 对象的 JSON 数据,以便我可以将 JSON 中的这些值存储在数据库中。

这是我的代码:

var client = newRestClient("https:xxxxxxxxxxxxxxxxxx/pincodes/");
var request = new RestRequest(Method.POST);
request.AddHeader("Postman-Token", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
request.AddHeader("cache-control", "no-cache");
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddHeader("content-type", "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW");
request.AddParameter("multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW", "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"username\"\r\n\r\xxxxxxxxxxxxxxxx\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"password\"\r\n\r\xxxxxxxxxxxxxxxx\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
string JsonContent = response.Content;

这是 json 文件的样子:

[{"city": "AMBALA", "state": "Haryana", "city_type": "", "active": true, "route": "HR/I1H/ABA", "date_of_discontinuance": "", "state_code": "HR", "pincode": 134003, "city_code": "ABA", "dccode": "ABA"}, 

{"city": "AMBALA", "state": "Haryana", "city_type": "", "active": true, "route": "HR/I1H/ABA", "date_of_discontinuance": "", "state_code": "HR", "pincode": 134002, "city_code": "ABA", "dccode": "ABA"}]

我想访问特定的值,例如。 city, pincodes 等的值。 如何创建模型,我试过了,但遇到了一些错误:“错误 CS0825 上下文关键字 'var' 可能只出现在局部变量声明或脚本代码中” em>

【问题讨论】:

标签: c# json json-deserialization


【解决方案1】:

最好的方法是使用Json.NET

string json = @"{
  'Name': 'Bad Boys',
  'ReleaseDate': '1995-4-7T00:00:00',
  'Genres': [
    'Action',
    'Comedy'
  ]
}";

Movie m = JsonConvert.DeserializeObject<Movie>(json);

string name = m.Name; // Bad Boys

【讨论】:

    【解决方案2】:

    您可以使用 Json.Net 进行反序列化。第一步是为您的城市定义一个模型。

    例如,

    public class CityDetail
    {
        public string city { get; set; }
        public string state { get; set; }
        public string city_type { get; set; }
        public bool active { get; set; }
        public string route { get; set; }
        public string date_of_discontinuance { get; set; }
        public string state_code { get; set; }
        public int pincode { get; set; }
        public string city_code { get; set; }
        public string dccode { get; set; }
    }
    

    现在,您可以使用 Json.Net 对数据进行反序列化,如下所示。

    var result = JsonConvert.DeserializeObject<List<CityDetail>>(jsonString);
    

    这将为您提供一个包含数据的列表

    输出

    【讨论】:

      【解决方案3】:

      您可以拥有一个城市模型,然后反序列化为该模型。

       public class CityModel
          {
              public string city { get; set; }
              public string state { get; set; }
              public string city_type { get; set; }
              public bool active { get; set; }
              public string route { get; set; }
              public string date_of_discontinuance { get; set; }
              public string state_code { get; set; }
              public int pincode { get; set; }
              public string city_code { get; set; }
              public string dccode { get; set; }
          }
      
      
      string JsonResult = @"[{'city': 'AMBALA', state: 'Haryana', 'city_type': '', 'active': true, 'route': 'HR / I1H / ABA', 'date_of_discontinuance': '', 'state_code': 'HR', 'pincode': 134003, 'city_code': 'ABA', 'dccode': 'ABA'},{ 'city': 'AMBALA', 'state': 'Haryana', 'city_type': '', 'active': true, 'route': 'HR/I1H/ABA', 'date_of_discontinuance': '', 'state_code': 'HR', 'pincode': 134002, 'city_code': 'ABA', 'dccode': 'ABA'}]";
      
      var result = Newtonsoft.Json.JsonConvert.DeserializeObject<List<CityModel>>(JsonResult);  
      

      否则,您可以使用动态,但这很昂贵。

      List<dynamic> result = JsonConvert.DeserializeObject<List<dynamic>>(JsonResult);
      var city = result[0].city;
      

      【讨论】:

      • 但我无法创建模型我对这些概念不熟悉
      • 我喜欢您使用该模型的结果,但对于初学者,我们应该尝试我的提议中提到的动态:D
      • @Nadir,只有在我们不知道返回什么对象类型的情况下,我们才应该使用动态。如果我们确定返回的列表类型,我们应该始终使用模型方法。使用动态被认为是不好的做法,因为它指的是类型后期绑定,这意味着系统将仅在执行期间而不是在编译期间检查类型。 link
      猜你喜欢
      • 1970-01-01
      • 2017-01-28
      • 2012-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多