我使用的是JSON web服务。对于任何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);
创建了具有所有空poperties值的RegisterResponse。
如果与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 ()
{
}
}
这不是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