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