0

JSONWebサービスを使用しています。どの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 ()
    {
    }
}
4

1 に答える 1

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
于 2012-07-10T15:32:46.623 に答える