JSON 反序列化到错误的对象 class 通过

JSON Deserialization to wrong object class passing

我有 2 个 类,代表 2 个 Json 响应,以防出现错误或成功。

private class SuccessResponse
    {
        public string message { get; set; }
        public bool sent { get; set; }
        public string id { get; set; }
    }

private class ErrorResponse
    {
        public string error { get; set; }
    }

我使用 try/catch 块通过尝试反序列化到 SuccessResponse 对象来确定哪种响应,我的想法是如果它失败了它是一个 ErrorResponse 类型的对象并在 catch 块中反序列化.

Json 字符串如下所示:{\"error\":\"Instance \\"123\\" doesn't exist.\"}

这种决心在我过去的项目中很奏效,没有任何问题。

问题出现在 try 块中,对 SuccessResponse 的反序列化正在通过,没有引发任何异常,反序列化返回的对象是空的,只有默认值,当它应该在 [= 中被捕获和反序列化时16=]块

我试过了,先序列化再反序列化,把反斜杠换成"",加上Json属性属性,但还是一直“通过”反序列化,返回一个空的SuccessResponse对象。

这里是 try/catch:

try
{
  var trySuccess = Newtonsoft.Json.JsonConvert.DeserializeObject<SuccessResponse>(resp);

}
catch
{
  var tryError = Newtonsoft.Json.JsonConvert.DeserializeObject<ErrorResponse>(resp);

  Log.Error($"ERROR FROM REMOTE SERVER: {tryError.error}");
}

制作一个class(使用此代码或在制作 classes protected 而不是 private 后使用继承)

private class Response
    {
        public string message { get; set; }
        public bool sent { get; set; }
        public string id { get; set; }
        public string error { get; set; }
    }

        //or 

private class SuccessResponse:ErrorResponse
    {
        public string message { get; set; }
        public bool sent { get; set; }
        public string id { get; set; }
    }

和代码

var result = Newtonsoft.Json.JsonConvert.DeserializeObject<Response>(resp);

if (!string.IsNullOrEmpty(result.error) Log.Error($"ERROR FROM REMOTE SERVER: {result.error}");