2017-06-22 104 views
0

我試圖解析的多級JSON數組,但我得到以下異常:如何解析的多級JSON陣列

Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'Tractor.Models.UserDetails' because the type requires a JSON object (e.g. {"name":"value"}) to deserialize correctly. 

這裏是JSON響應:

{ 
    "status": 1, 
    "message": null, 
    "userdetails": [ 
    { 
     "ID": 9, 
     "Name": "aleem", 
     "Company_Name": null, 
     "Email": null, 
     "Password": null, 
     "Created_Date": null, 
     "Email_Confirm": null, 
     "Token": null, 
     "Phone": null, 
     "Website": null, 
     "allcompanies": [ 
     { 
      "Name": "self", 
      "allprojects": [ 
      { 
       "ID": 1, 
       "Name": "test" 
      } 
      ] 
     } 
     ], 
     "screens": 3 
    } 
    ] 
} 

下面是我已經添加到獲得JSON響應的類:

class LoginApiResponse 
{ 
     [JsonProperty("status")] 
     public int Status { get; set; } 

     [JsonProperty("message")] 
     public string Message { get; set; } 

     [JsonProperty("userdetails")] 
     public UserDetails UserDetails { get; set; } 

    } 

class UserDetails 
{ 
    [JsonProperty("ID")] 
    public int ID { get; set; } 

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

    [JsonProperty("Company_Name")] 
    public string Company_Name { get; set; } 

    [JsonProperty("Email")] 
    public string Email { get; set; } 

    [JsonProperty("Password")] 
    public string Password { get; set; } 

    [JsonProperty("Created_Date")] 
    public string Created_Date { get; set; } 

    [JsonProperty("Email_Confirm")] 
    public string Email_Confirm { get; set; } 

    [JsonProperty("Token")] 
    public string Token { get; set; } 

    [JsonProperty("Phone")] 
    public string Phone { get; set; } 

    [JsonProperty("Website")] 
    public string Website { get; set; } 

    [JsonProperty("allcompanies")] 
    public List<Company> Companies { get; set; } 

    [JsonProperty("screens")] 
    public int Screens { get; set; } 
} 

class Company 
    { 
     [JsonProperty("Name")] 
     public string Name { get; set; } 

     [JsonProperty("allprojects")] 
     public List<Project> Projects {get;set;} 
    } 

class Project 
    { 
     [JsonProperty("ID")] 
     public int ID { get; set; } 

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

我正在使用下面的代碼來序列化此JSON:

var response = client.Execute(request); 
var final = JsonConvert.DeserializeObject<LoginApiResponse>(response.Content); 
+0

'UserDetails'是Json中的數組 – PinBack

回答

1

的JSON要求UserDetails字段爲UserDetails對象數組(或列表):

class LoginApiResponse 
{ 
    //......... 
    [JsonProperty("userdetails")] 
    public UserDetails[] UserDetails { get; set; } 
    //    ^^ 
    // Alternatively, use List<UserDetails> instead of UserDetails[] 
} 
+0

感謝它爲我工作。 – Aleem

-1

我做的方式,它是反序列化JSON對象爲動態變量,然後訪問屬性您需要使用該動態變量,如果需要,可以使用這些來初始化模型。

0

你的問題是在LoginApiResponse類。

該屬性UserDetails應該是List<UserDetails>而不是UserDetails。所以,你得到:

class LoginApiResponse 
{ 
    [JsonProperty("status")] 
    public int Status { get; set; } 

    [JsonProperty("message")] 
    public string Message { get; set; } 

    [JsonProperty("userdetails")] 
    public List<UserDetails> UserDetails { get; set; } 

} 

這是因爲你期望在JSON用於userdetails數組/列表:

{ 
    "status": 1, 
    "message": null, 
    "userdetails": [ 
     { /* ... */ }, 
     { /* ... */ } 
    ] 
} 

或者(如果你不希望的UserDetails的列表),你可以更改json(從列表到對象):

{ 
    "status": 1, 
    "message": null, 
    "userdetails": 
     { /* ... */ } 
} 
+0

謝謝,它爲我工作。 – Aleem