[英]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.