如果出現錯誤或成功,我有 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化傳遞到沒有引發任何例外,反序列化回傳的物件為空,只有默認值,當它應該在catch塊中被捕獲和反序列化時
我已經嘗試過,在反序列化之前對其進行序列化,將反斜杠替換為"",添加 JsonProperty 屬性,但它仍然保持“通過”反序列化并回傳一個空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}");
}
uj5u.com熱心網友回復:
制作一個類(使用此代碼或在使類受保護而不是私有后使用繼承)
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}");
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/426809.html
