繁体   English   中英

Json词典使用RestSharp / Newtonsoft.Json反序列化结果。

[英]Json dictionary result deserialization with RestSharp/Newtonsoft.Json.

我正在使用restsharp和newtonsoft.json以便与我的Python API通信。

通讯正常。 返回简单字符串的基本查询已得到处理,因此这不是问题。

我对反序列化更复杂的结果有疑问,这是我第一次这样做。

因此,从Web服务的角度来看,我将返回以下json结构:

{
  "Employee": [
        {
          "Department.DepartmentName": "IT", 
          "Employee.EmployeeArchived": 0, 
          "Employee.EmployeeDepartmentId": 13, 
          "Employee.EmployeeFired": 0, 
          "Employee.EmployeeId": 1, 
          "Employee.EmployeeName": "Name1", 
          "Employee.EmployeePID": 292, 
          "Employee.EmployeeSurname": "Surname1"
    }, 
    {
          "Department.DepartmentName": "IT", 
          "Employee.EmployeeArchived": 0, 
          "Employee.EmployeeDepartmentId": 4, 
          "Employee.EmployeeFired": 0, 
          "Employee.EmployeeId": 2, 
          "Employee.EmployeeName": " Name2", 
          "Employee.EmployeePID": 50, 
          "Employee.EmployeeSurname": " Surname2"
    }
]
}

在我的C#程序中的response.contents(RestClient.Execute的结果)中,我得到了这样的内容(我将其截断为一个数据行):

{\n  \"Employee\": [\n    {\n      \"Department.DepartmentName\": \"EDV\", \n      \"Employee.EmployeeArchived\": 0, \n      \"Employee.EmployeeDepartmentId\": 13, \n      \"Employee.EmployeeFired\": 0, \n      \"Employee.EmployeeId\": 1, \n      \"Employee.EmployeeName\": \"Name1\", \n      \"Employee.EmployeePID\": 292, \n      \"Employee.EmployeeSurname\": \"Surname1\"\n    }

到目前为止看起来还不错。

现在。 我试图定义我的数据类以使其能够反序列化,如下所示:

public class Employee
    {
        [JsonProperty("Department.DepartmentName")]
        public string Department { get; set; }

        [JsonProperty("Employee.EmployeeName")]
        public string Name {get; set;}

        [JsonProperty("Employee.EmployeeSurname")]
        public string Surname { get; set; }

        [JsonProperty("Employee.EmployeeArchived")]
        public int Archived { get; set; }

        [JsonProperty("Employee.EmployeeFired")]
        public int Fired { get; set; }

        [JsonProperty("Employee.EmployeeId")]
        public int Id { get; set; }

        [JsonProperty("Employee.EmployeeDepartmentId")]
        public int DepId { get; set; }

        [JsonProperty("Employee.EmployeePID")]
        public int PID { get; set; }

另外,类包含一个构造函数,但我认为这不是问题。

现在,只需调用:

 var Data = JsonConvert.DeserializeObject<Employee>(response.Content);

...返回null。 我想问题是我返回一个字典“ Employee”,而不仅仅是一个数据行。 我将如何设计它才能正确反序列化?

看起来比我想的要简单。 我将“ Employee”类重命名为“ EmployeeData”(仅出于优雅和与json参数名称兼容的目的)。

然后我定义了第二类:

class EmployeeList
    {
        [JsonProperty("Employee")]
        public List<EmployeeData> Employee { get; set; }
    }

接着

JsonConvert.DeserializeObject<EmployeeList>(response.Content);

返回正确填充的班级以及员工列表。 不重要的。 Json.net确实功能强大。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM