C# Json.NET中的RawJSON对象

C# Json.NET中的RawJSON对象,c#,json.net,json-rpc,C#,Json.net,Json Rpc,我想分两步反序列化JSON-RPC请求: 步骤1:将id和method解析为基类 步骤2:根据方法将params解析为第二个类 例如: 代码(如果存在像RawJson这样的对象) Request req=JsonConvert.DeserializeObject; 如果(请求方法==“耳语”) { Whisper Whisper=RawJson.DeserializeObject(); sesper.Exec(); } 解决这个问题的一种方法是,如果Json.NET有一些原始Json对象,但我

我想分两步反序列化JSON-RPC请求:

步骤1:将
id
method
解析为基类
步骤2:根据方法将
params
解析为第二个类

例如:

代码(如果存在像RawJson这样的对象)

Request req=JsonConvert.DeserializeObject;
如果(请求方法==“耳语”)
{
Whisper Whisper=RawJson.DeserializeObject();
sesper.Exec();
}
解决这个问题的一种方法是,如果Json.NET有一些原始Json对象,但我找不到

那么,我是否错过了原始对象,或者是否有其他好方法可以做到这一点



另外,
id
值可以是任何值:null、string、int、array等。它应该只在json rpc响应中返回。

您可以使用
动态

dynamic dynJson = JsonConvert.DeserializeObject(s)
if(dynJson.method=="whisper")
{
    var to = dynJson.@params.to; //since params is reserved word
}
这也是可能的

string json = "{method:'whisper',params:{to:'aaa',msg:'msg1'}}";

var jObj = JsonConvert.DeserializeObject(json) as JObject;
if (jObj["method"].ToString() == "whisper")
{
    var whisper = JsonConvert.DeserializeObject<Whisper>(jObj["params"].ToString());
}
string json=“{method:'whisper',params:{to:'aaa',msg:'msg1'}”;
var jObj=JsonConvert.DeserializeObject(json)作为JObject;
if(jObj[“方法”].ToString()=“耳语”)
{
var whisper=JsonConvert.DeserializeObject(jObj[“params”].ToString());
}

我更喜欢使用类,因为它将阐明方法参数的结构,此外,我还可以将方法添加到类中。(我将更新我的示例)+1因为这是一个非少工作的解决方案。整洁!这似乎更像我要找的。我将在我的代码中试用它。它按预期工作。我想这需要我对参数进行反序列化,这会导致开销。但如果没有其他解决办法?优化将在稍后进行。谢谢你的帮助@ANisus事实上,它是反序列化反序列化的,因此
ToString()
(存储的字符串值)不需要序列化?如果是这样,那就很好了。在任何情况下,此解决方案都需要两个反序列化。
dynamic dynJson = JsonConvert.DeserializeObject(s)
if(dynJson.method=="whisper")
{
    var to = dynJson.@params.to; //since params is reserved word
}
string json = "{method:'whisper',params:{to:'aaa',msg:'msg1'}}";

var jObj = JsonConvert.DeserializeObject(json) as JObject;
if (jObj["method"].ToString() == "whisper")
{
    var whisper = JsonConvert.DeserializeObject<Whisper>(jObj["params"].ToString());
}