首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RawJSON对象在Json.NET中

RawJSON对象在Json.NET中
EN

Stack Overflow用户
提问于 2012-12-05 07:57:50
回答 1查看 2.3K关注 0票数 2

我想分两个步骤反序列化一个JSON请求:

步骤1:将idmethod解析为基类

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

示例:

代码语言:javascript
复制
interface IAction
{
    bool Exec();
}

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

    [JsonProperty("params")]
    public RawJson Params;

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

class Whisper : IAction
{
    [JsonProperty("to")]
    public string To;

    [JsonProperty("msg")]
    public string Message;

    public bool Exec()
    {
        // Perform the whisper action
        return true;
    }
}

class Say : IAction
{
    [JsonProperty("msg")]
    public string Message;

    public bool Exec()
    {
        // Perform the say action
        return true;
    }

}

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

代码语言:javascript
复制
Request req = JsonConvert.DeserializeObject<Request>(s);
if( req.Method == "whisper" )
{
    Whisper whisper = RawJson.DeserializeObject<Whisper>();
    whisper.Exec();
}

解决这个问题的一种方法是如果Json.NET有某种原始的json对象,但是我找不到。

那么,我是刚刚错过了原始对象,还是有其他好的方法来做到这一点?

Ps。id值可以是任何东西: null、string、int、array等等。它应该在json响应中返回。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-05 08:03:38

您可以使用dynamic

代码语言:javascript
复制
dynamic dynJson = JsonConvert.DeserializeObject(s)
if(dynJson.method=="whisper")
{
    var to = dynJson.@params.to; //since params is reserved word
}

这也是可能的

代码语言:javascript
复制
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());
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13718638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档