public static T TryDeserialize <T>(string body) { try { var deserialized = JsonConvert.DeserializeObject <T>(body, new ErrorThrowJsonConverter <T>()); if (deserialized is IBaseMastodonEntity) { ((IBaseMastodonEntity)deserialized).RawJson = body; } return(deserialized); } catch (JsonReaderException readerException) { var error = new Error { RawJson = "Cannot read original JSON" }; var exception = new DeserializeErrorException($"Invalid Json Format", readerException); exception.Error = error; throw exception; } }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { serializer.MissingMemberHandling = MissingMemberHandling.Ignore; if (objectType.Name.StartsWith("IEnumerable")) { var jArray = JArray.Load(reader); return(jArray.ToObject <T>()); } var jObject = JObject.Load(reader); if (jObject["error"] != null) { var error = jObject.ToObject <Error>(); error.RawJson = jObject.ToString(); var exception = new DeserializeErrorException($"Cant deserialize response, Type {objectType}") { Error = error }; throw exception; } return(jObject.ToObject <T>()); }