2

我正在尝试解析 JSON rpc 2.0 请求。标准在这里定义。

我将我的班级定义为:

 [DataContract]
     public class JsonRpc2Request
     {
         public string method;
         [DataMember(Name = "params")]
         public object parameters;
         public object id;
     }

然后我尝试解析一个请求,如下所示:

JavaScriptSerializer ser = new JavaScriptSerializer();
var obj = ser.Deserialize<JsonRpc2Request>(Message.Trim());

obj.parameters总是null。我认为这是因为我无法params根据 JSON RPC 规范定义具有名称的对象。(我的尝试是使用[DataMember(Name="params")]装饰。

params当 JSON RPC 规范调用c# 中的关键字名称时,如何填充我的参数对象?

4

2 回答 2

3

您可以使用DataContractJsonSerializer

DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(JsonRpc2Request));
MemoryStream stream = new MemoryStream(Encoding.Unicode.GetBytes(Message.Trim()));

var obj = ser.ReadObject(stream);

method并且您还需要id使用DataMember属性进行注释。

于 2012-10-09T00:51:00.493 回答
0

我会使用Json.Net来完全控制序列化/反序列化过程

string json = @"{""method"":""mymethod"",""params"":[1,2],""id"":3}";
var rpcReq = JsonConvert.DeserializeObject<JsonRpc2Request>(json);


public class JsonRpc2Request
{
    [JsonProperty("method")]
    public string Method;

    [JsonProperty("params")]
    public object[] Parameters;

    [JsonProperty("id")]
    public string Id;
}

由于完成此步骤后,您将不得不处理更复杂的情况,例如

 @"{""method"":""mymethod"",""params"":[{""name"":""joe""}],""id"":3}";
于 2012-10-09T08:32:11.567 回答