1

Python API と通信するために、restsharp と newtonsoft.json を使用しています。

通信は正常に機能します。単純な文字列を返す基本的なクエリは処理されるため、問題はありません。

より複雑な結果の逆シリアル化に問題があり、これを初めて実行しています。

したがって、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の結果)で、次のようなものを取得しています(これを1つのデータ行に切り捨てました):

{\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 を返します。問題は、単一のデータ行だけでなく、辞書「従業員」を返すことだと思います。これを正しく逆シリアル化するには、どのように設計する必要がありますか?

4

1 に答える 1

0

思ったより簡単だったようです。「Employee」クラスの名前を「EmployeeData」に変更しました(エレガントさとjsonパラメーター名との互換性のため)。

次に、2番目のクラスを定義しました:

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

その後

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

従業員のリストで正しく埋められたクラスを返します。些細なこと。Json.net は本当に強力です。

于 2013-10-27T10:03:13.330 に答える