2012-10-09 78 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}";