in src/StreamJsonRpc/JsonMessageFormatter.cs [402:439]
public JsonRpcMessage Deserialize(JToken json)
{
Requires.NotNull(json, nameof(json));
try
{
switch (this.ProtocolVersion.Major)
{
case 1:
this.VerifyProtocolCompliance(json["jsonrpc"] is null, json, "\"jsonrpc\" property not expected. Use protocol version 2.0.");
this.VerifyProtocolCompliance(json["id"] is not null, json, "\"id\" property missing.");
return
json["method"] is not null ? this.ReadRequest(json) :
json["error"]?.Type == JTokenType.Null ? this.ReadResult(json) :
json["error"] is { Type: not JTokenType.Null } ? this.ReadError(json) :
throw this.CreateProtocolNonComplianceException(json);
case 2:
this.VerifyProtocolCompliance(json.Value<string>("jsonrpc") == "2.0", json, $"\"jsonrpc\" property must be set to \"2.0\", or set {nameof(this.ProtocolVersion)} to 1.0 mode.");
return
json["method"] is not null ? this.ReadRequest(json) :
json["result"] is not null ? this.ReadResult(json) :
json["error"] is not null ? this.ReadError(json) :
throw this.CreateProtocolNonComplianceException(json);
default:
throw Assumes.NotReachable();
}
}
catch (JsonException exception)
{
var serializationException = new JsonSerializationException($"Unable to deserialize {nameof(JsonRpcMessage)}.", exception);
if (json.GetType().GetTypeInfo().IsSerializable)
{
serializationException.Data[ExceptionDataKey] = json;
}
throw serializationException;
}
}