繁体   English   中英

JSON 反序列化为错误 object 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 object 来确定哪种响应,我的想法是,如果它失败,它是 object 的 ErrorResponse 类型,并在catch块中反序列化。

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

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

问题发生在 try 块中,对SuccessResponse的反序列化正在通过而没有引发任何异常,反序列化返回的 object 为空,只有默认值,当它应该在catch块中被捕获和反序列化时

我已经尝试过,在反序列化之前对其进行序列化,用""替换反斜杠,添加 JsonProperty 属性,但它仍然保持“通过”反序列化并返回一个空的SuccessResponse object。

这是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(使用此代码或在保护类而不是私有类后使用 inheritance)

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}");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM