From 2dc61b1a7a45515b182a93ec384cfbe630313737 Mon Sep 17 00:00:00 2001 From: Derek Antrican Date: Tue, 16 Nov 2021 08:47:30 -0800 Subject: [PATCH 1/2] Properly throw deserializer errors --- PocketSharp/PocketClient.cs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/PocketSharp/PocketClient.cs b/PocketSharp/PocketClient.cs index 2d1f2b9..269de0d 100644 --- a/PocketSharp/PocketClient.cs +++ b/PocketSharp/PocketClient.cs @@ -350,13 +350,16 @@ protected async Task RequestAsString(string uri, CancellationToken cance json = json.Replace("[]", "{}"); // deserialize object + List errors = new List(); + T parsedResponse = JsonConvert.DeserializeObject( json, new JsonSerializerSettings { Error = (object sender, ErrorEventArgs args) => { - throw new PocketException(String.Format("Parse error: {0}", args.ErrorContext.Error.Message)); + errors.Add(new PocketException(String.Format("Parse error: {0}", args.ErrorContext.Error.Message), args.ErrorContext.Error)); + args.ErrorContext.Handled = true; }, Converters = { @@ -369,6 +372,13 @@ protected async Task RequestAsString(string uri, CancellationToken cance } ); + if (errors.Count > 0) + { + AggregateException ex = new AggregateException("Unable to parse json. See innner exceptions and exception.Data[\"json\"] for details", errors); + ex.Data["json"] = json; + throw ex; + } + return parsedResponse; } From 9ea46dd98c20c7b3a75e5ef2de93ae0d73f43c04 Mon Sep 17 00:00:00 2001 From: Derek Antrican Date: Tue, 16 Nov 2021 08:56:11 -0800 Subject: [PATCH 2/2] Added case for throwing single exception --- PocketSharp/PocketClient.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/PocketSharp/PocketClient.cs b/PocketSharp/PocketClient.cs index 269de0d..2c770cc 100644 --- a/PocketSharp/PocketClient.cs +++ b/PocketSharp/PocketClient.cs @@ -372,7 +372,13 @@ protected async Task RequestAsString(string uri, CancellationToken cance } ); - if (errors.Count > 0) + if (errors.Count == 1) + { + PocketException firstException = errors[0]; + firstException.Data["json"] = json; + throw firstException; + } + else if (errors.Count > 1) { AggregateException ex = new AggregateException("Unable to parse json. See innner exceptions and exception.Data[\"json\"] for details", errors); ex.Data["json"] = json;