1 using Newtonsoft.Json.Linq;
3 using System.Collections.Generic;
5 namespace GumartinM.JsonRPC4NET
7 public class ExceptionResolver
10 /// Resolves the exception.
12 /// <returns>The exception.</returns>
13 /// <param name="errorToken">Error token.</param>
14 public Exception ResolveException(JToken errorToken)
16 JObject errorData = (JObject)errorToken;
17 IDictionary<string, JToken> errorTokens = errorData;
19 if (!errorTokens.ContainsKey("data"))
21 return CreateJsonRpcClientException(errorToken);
24 JToken dataToken = errorToken["data"];
25 JObject data = (JObject)dataToken;
28 if (!errorTokens.ContainsKey("exceptionTypeName"))
30 return CreateJsonRpcClientException(errorToken);
33 string exceptionTypeName = data["exceptionTypeName"].Value<string>();
34 string message = data.Value<string>("message");
36 Exception endException = CreateException(exceptionTypeName, message);
42 /// Creates the json rpc client exception.
44 /// <returns>The json rpc client exception.</returns>
45 /// <param name="errorToken">Error token.</param>
46 private JsonRpcClientException CreateJsonRpcClientException(JToken errorToken)
48 return new JsonRpcClientException(
49 errorToken.Value<int?>("code") ?? 0,
50 errorToken.Value<string>("message"),
55 /// Creates the exception.
57 /// <returns>The exception.</returns>
58 /// <param name="exceptionTypeName">Exception type name.</param>
59 /// <param name="message">Message.</param>
60 private Exception CreateException(string exceptionTypeName, string message)
62 return new Exception("Remote exception: " + exceptionTypeName +
63 " Remote message: " + message);