我正在使用JSON网络服务。在任何JSON请求上,Web服务都可以通过错误类型JSON或响应类型进行响应。例如:
{
"response": "register",
"error": {
"@c" : "error",
"code": "USER_EXISTS",
"message": ""
}
}
或
{
"response": "register",
"register": {
"session": {
"@c" : "session",
"userId": "18",
"sessionId": "ASFT23WETT234QQW"
}
}
}
我尝试反序列化的任何响应都与请求有关。例如,当请求是RegisterRequest时,RegisterResponse。
如果响应是错误类型响应,则代码
JsonConvert.DeserializeObject<RegisterResponse> (jsonResponse);
创建了RegisterResponse,包含所有空的poperties值。
如果与JSON字符串和目标类型存在某些不兼容性,如何建议JSON.NET抛出异常?
类定义:
public class Response
{
public string response { get; set; }
public Response ()
{ }
}
public class Session
{
public long userId;
public string sessionId;
public Session ()
{ }
}
public class RegisterResponse: Response
{
public Session session { get; set; }
public RegisterResponse ()
{
session = new Session();
}
}
public class Error
{
public string code;
public string message;
public Error ()
{
}
}
答案 0 :(得分:1)
这不是直接JSON.NET的包,因为你给它的转换实际上在语义上是完全有效的,你只是给了它不好的数据。最好的办法就是先检查数据。创建一个Error
类并通过
JsonConvert.DeserializeObject<Error> (jsonResponse);
然后测试Error
的属性以确保它们是空的,就像你希望的那样。
或者你可以解码你正在寻找的单个Error属性,看看它是否返回null。
JObject o = JObject.Parse(jsonResponse);
string error = (string)o["Error"];
if(string.IsNullOrEmpty(error) == false)
// bad things going down
// if you get here it's all good