JSON.NET-如果JSON数据与所需类型没有关系,则抛出异常



我使用的是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

相关内容

  • 没有找到相关文章

最新更新