2013-10-26 2 views
1

Я использую restsharp и newtonsoft.json для связи с моим API-интерфейсом Python.Редактирование дескриптора словаря Json с помощью RestSharp/Newtonsoft.Json.

Связь работает нормально. Базовые запросы, которые возвращают простые строки, обрабатываются, так что это не проблема.

У меня проблема с десериализацией более сложных результатов, и я делаю это в первый раз.

Таким образом, с веб-службы точки зрения я возвращаю следующую структуру 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" 
    } 
] 
} 

в response.contents (результат RestClient.Execute) в моем C# программе я получаю что-то вроде этого (I урезал это только до одного ряда данных):

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

... возвращает нуль. Я полагаю, что проблема заключается в том, что я возвращаю словарь «Сотрудник», а не только одну строку данных. Как мне нужно будет спроектировать его, чтобы десериализировать это правильно?

ответ

0

Похоже, это было проще, чем я думал. Я переименовал класс «Сотрудник» в «EmployeeData» (только ради элегантности & совместимость с именами параметров json).

тогда я определен второй класс:

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

А потом

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

возвращается правильно заполненный класс со списком сотрудников. Тривиальный. Json.net действительно мощный.