You can use dynamic
dynamic dynJson = JsonConvert.DeserializeObject(s)
if(dynJson.method=="whisper")
{
var to = dynJson.@params.to; //since params is reserved word
}
This is also possible
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());
}