0

我正在使用 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。

如果 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 ()
    {
    }
}
4

1 回答 1

1

这不是直接 JSON.NET 的包,因为您给它的转换实际上在语义上是完全有效的,您只是给它提供了错误的数据。最好的办法就是先检查您的数据。创建一个Error类并通过

JsonConvert.DeserializeObject<Error> (jsonResponse);

然后 testError的属性以确保它们按照您希望的方式为空。

或者,您可以只解码您要查找的单个 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
于 2012-07-10T15:32:46.623 回答