Как я могу узнать, какой тип JSON возвращает JsonSerializer.Deserialize? - PullRequest
0 голосов
/ 02 февраля 2020

Теперь я использую JsonSerializer.Deserialize из System.Text.Json для десериализации из строки в модель. Однако есть две ситуации, когда я получаю JSON от стороннего API удаленного сервера. Когда все работает хорошо, он вернет JSON, включая нужное мне сообщение чата:

{
    "msg": "hello everyone!",
    "msgtype": "text"
}

Если с кодом что-то не так, он вернет JSON, включая ошибку:

{
    "errorcode": "123",
    "errormsg": "Not such table \"aaa\""
}

Я хочу знать, какой тип JSON возвращается каждый раз, сообщение или ошибка выше.

Я думаю использовать String.Contain("errorcode"), чтобы узнать, возвращает ли оно сообщение JSON или ошибка JSON в начале.

Тем не менее, сообщение чата непредсказуемо, что оно даже может содержать текст «errorcode» в сообщении JSON.

Вот коды:

  public class msgModel
    {
        public string msg{ get; set; }
        public string msgtype{ get; set; }
    }
 public class errorModel
    {
        public string errorcode{ get; set; }
        public string errormsg{ get; set; }
    }

Я всегда десериализую JSON следующим образом:

string JSON="";//some JSON
JsonSerializer.Deserialize(JSON, typeof(msgModel));

Я могу только добавить try{}catch{} вокруг него, чтобы узнать, возвращает ли JSON ошибку , Я не думаю, что это правильный способ сделать это. Как я могу решить это?

1 Ответ

1 голос
/ 02 февраля 2020

Я рекомендую объединить все свойства в 1 объект и проверить наличие «кода ошибки».

public class MsgModel
{
    [JsonProperty("errormsg")]
    public string Error { get; set; }

    [JsonProperty("errorcode")]
    public string ErrorCode { get; set; }

    [JsonProperty("msg")]
    public string msg { get; set; }

    [JsonProperty("msgtype")]
    public int msgtype { get; set; }
}

Далее все, что вам нужно сделать, это проверить if object.errorcode.isNullorEmpty и go оттуда .

Это более надежно

...