我在UniversalApp上工作,它調用大量返回JSON數據的webservices。反序列化包含對象列表的Json
所有web服務返回的Json我的第一級(WsResponse.cs),包含此結構:
public string status { get; set; }
public object data { get; set; }
public List<object> errors { get; set; }
如果狀態爲「成功」,我可以反序列化的簡單數據目的是通過:
WsResponse wsResponse = JsonConvert.DeserializeObject<WsResponse>(response);
User user = JsonConvert.DeserializeObject<User>(wsResponse.data.ToString());
在其他情況下,有必要首先反序列化在一個結果對象,之前反序列化DATAS:
WsResponse wsResponse = JsonConvert.DeserializeObject<WsResponse>(response);
WsResponseResult wsResponseResult = JsonConvert.DeserializeObject<WsResponseResult>(
wsResponse.data.ToString());
List<Theme> themes = JsonConvert.DeserializeObject<List<Theme>>(
wsResponseResult.result.ToString());
但是,如果狀態是「失敗」,我需要捕獲錯誤列表。但我不能反序列化這個對象列表... 這裏是JSON金銀幣,我從web服務獲得的一個例子,當它包含錯誤:
{
"status": "failure",
"data": {},
"errors": [
{
"200": "The parameter 'email' is not present"
},
{
"200": "The parameter 'password' is not present"
}
]
}
我嘗試反序列化它:
List<KeyValuePair<string, string>> kvpError = new List<KeyValuePair<string,string>>();
kvpError = JsonConvert.DeserializeObject<List<KeyValuePair<<string, string>>>(
wsResponse.errors.ToString());
Dictionary<string, string> dError = new Dictionary<string, string>();
dError = JsonConvert.DeserializeObject<Dictionary<string, string>>(
wsResponse.errors.ToString());
=>,但它不工作
我還通過錯誤DATAS嘗試反序列化在他們面前:
foreach(var error in wsResponse.errors)
{
KeyValuePair<string, string> kvpError = new KeyValuePair<string,string>();
kvpError = JsonConvert.DeserializeObject<KeyValuePair<string, string>>(
error.ToString());
}
=>,但它不工作得更好...
你會對如何解決我的問題的想法?
謝謝,它工作正常。 但是JSON的這種結構並不是很好,因爲每個詞典都只包含一個項目... –
@ Gold.strike - 我同意這一點,這就是我在我的答案的buttom pqrt中所說的。考慮如果可能的話重構你的JSON。 –
我會跟我的客戶討論這個問題,看看我們是否可以改變JSON結構。 您使用過哪種工具來查找對象的類型? –