1 using Newtonsoft.Json.Linq;
3 using System.Collections.Generic;
5 namespace GumartinM.JsonRPC4NET
8 /// Exception resolver.
10 public class ExceptionResolver
13 /// Resolves the exception.
15 /// <returns>The exception.</returns>
16 /// <param name="errorToken">Error token.</param>
17 public Exception ResolveException(JToken errorToken)
19 JObject errorData = (JObject)errorToken;
20 IDictionary<string, JToken> errorTokens = errorData;
22 if (!errorTokens.ContainsKey("data"))
24 return CreateJsonRpcClientException(errorToken);
27 JToken dataToken = errorToken["data"];
28 JObject data = (JObject)dataToken;
31 if (!errorTokens.ContainsKey("exceptionTypeName"))
33 return CreateJsonRpcClientException(errorToken);
36 string exceptionTypeName = data["exceptionTypeName"].Value<string>();
37 string message = data.Value<string>("message");
39 Exception endException = CreateException(exceptionTypeName, message);
45 /// Creates the json rpc client exception.
47 /// <returns>The json rpc client exception.</returns>
48 /// <param name="errorToken">Error token.</param>
49 private JsonRpcClientException CreateJsonRpcClientException(JToken errorToken)
51 return new JsonRpcClientException(
52 errorToken.Value<int?>("code") ?? 0,
53 errorToken.Value<string>("message"),
58 /// Creates the exception.
60 /// <returns>The exception.</returns>
61 /// <param name="exceptionTypeName">Exception type name.</param>
62 /// <param name="message">Message.</param>
63 private Exception CreateException(string exceptionTypeName, string message)
65 return new Exception("Remote exception: " + exceptionTypeName +
66 " Remote message: " + message);