【发布时间】:2015-09-16 13:36:57
【问题描述】:
我在一个 UniversalApp 上工作,它调用许多返回 JSON 数据的 Web 服务。
所有的网络服务都返回给我一个包含这个结构的第一级 Json (WsResponse.cs):
public string status { get; set; }
public object data { get; set; }
public List<object> errors { get; set; }
如果状态为“success”,我可以通过以下方式反序列化简单数据对象:
WsResponse wsResponse = JsonConvert.DeserializeObject<WsResponse>(response);
User user = JsonConvert.DeserializeObject<User>(wsResponse.data.ToString());
在其他情况下,需要先在结果对象中反序列化,然后再反序列化数据:
WsResponse wsResponse = JsonConvert.DeserializeObject<WsResponse>(response);
WsResponseResult wsResponseResult = JsonConvert.DeserializeObject<WsResponseResult>(
wsResponse.data.ToString());
List<Theme> themes = JsonConvert.DeserializeObject<List<Theme>>(
wsResponseResult.result.ToString());
但如果状态是“failure”,我需要捕获错误列表。但我无法反序列化这个对象列表...... 以下是我从 web 服务中获取的包含错误的 JSON 数据示例:
{
"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());
=> 但它不起作用
我还尝试在反序列化之前检查错误数据:
foreach(var error in wsResponse.errors)
{
KeyValuePair<string, string> kvpError = new KeyValuePair<string,string>();
kvpError = JsonConvert.DeserializeObject<KeyValuePair<string, string>>(
error.ToString());
}
=> 但效果并不好...
您对如何解决我的问题有想法吗?
【问题讨论】:
标签: c# json web-services serialization json.net