2017-10-19 63 views
0

下面是我的JSON字符串如何反序列化給JSON字符串到一個定義的類

JSON字符串

{ 
    "RestResponse": { 
    "messages": [ 
     "Country found matching code [IN]." 
    ], 
    "result": { 
     "name": "India", 
     "alpha2_code": "IN", 
     "alpha3_code": "IND" 
    } 
    } 
} 

我在Xamarin使這些類,但沒有解析JSON的對象,請指導。

public class Country 
{ 
    [JsonProperty(PropertyName = "RestResponse")] 
    public List<myRestResponse> RestResponse { get; set; } 
} 

public class myRestResponse 
{ 
    [JsonProperty(PropertyName = "messages")] 
    public List<string> messages { get; set; } 
    [JsonProperty(PropertyName = "result")] 
    public List<Result> result { get; set; } 
} 

public class Result 
{ 
    [JsonProperty(PropertyName = "name")] 
    public string name { get; set; } 
    [JsonProperty(PropertyName = "alpha2_code")] 
    public string alpha2_code { get; set; } 
    [JsonProperty(PropertyName = "alpha3_code")] 
    public string alpha3_code { get; set; } 
} 

我使用下面的代碼反序列化

var content = await response.Content.ReadAsStringAsync(); 
Country country = JsonConvert.DeserializeObject<Country>(content); 
+0

'RestResponse'不是首發的集合,並且也不是'result'。 – juharr

回答

2

使用諸如http://json2csharp.com/之類的工具有助於定義您的課程。

這給出了

public class Result 
{ 
    public string name { get; set; } 
    public string alpha2_code { get; set; } 
    public string alpha3_code { get; set; } 
} 

public class RestResponse 
{ 
    public List<string> messages { get; set; } 
    public Result result { get; set; } 
} 

public class Country 
{ 
    public RestResponse RestResponse { get; set; } 
} 

結果所以,你可以看到你的國家的類(根對象)不應該有一個列表。

RestResponse應該只包含一個Result對象,而不是一個列表。

0

你JSON是不是按你的類結構,正確的格式。 JSON有兩個問題。根據你的類結構你試圖DeSerialize,property'RestResponse'是一個數組,但是在你的JSON中它不是。另一個是屬性「結果」,它又是一個數組,但在你的JSON中它不是。無論是根據您的JSON格式更新您的類結構或請嘗試以下JSON,

{ 
 
    "RestResponse": [ 
 
    { 
 
     "messages": [ "Country found matching code [IN]." ], 
 
     "result": [ 
 
     { 
 
      "name": "India", 
 
      "alpha2_code": "IN", 
 
      "alpha3_code": "IND" 
 
     } 
 
     ] 
 
    } 
 
    ] 
 
}

如果您想更新您的類結構,請複製下面的類,

public class Result 
{ 
public string name { get; set; } 
public string alpha2_code { get; set; } 
public string alpha3_code { get; set; } 
} 

public class RestResponse 
{ 
public List<string> messages { get; set; } 
public Result result { get; set; } 
} 

public class RootObject 
{ 
public RestResponse RestResponse { get; set; } 
} 
0

您的類定義與響應數據不匹配。您可以使用一些在線工具輕鬆創建類定義。如果您使用的是Visual Studio,那麼您可以簡單地使用粘貼特殊選項編輯菜單。注意到,你必須首先複製響應字符串,然後再進行粘貼。

enter image description here