2012-10-09 46 views
2

我想解析一个JSON rpc 2.0请求。该标准被定义为here用c#解析c#中的JSON请求关键字

我定义我的班级为:

[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。我认为这是因为我无法根据JSON RPC规范定义名称为params的对象。 (我尝试使用[DataMember(Name="params")]装饰

我怎么能填充当JSON RPC规范要求是在C#中的关键字名params我的参数对象

回答

3

可以使用DataContractJsonSerializer:?

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

var obj = ser.ReadObject(stream); 

,你会想注释methodidDataMember属性为好。

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}";