diff --git a/PocketSharp/PocketClient.cs b/PocketSharp/PocketClient.cs index 2d1f2b9..2c770cc 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,19 @@ protected async Task RequestAsString(string uri, CancellationToken cance } ); + 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; + throw ex; + } + return parsedResponse; }