gpt4 book ai didi

c# - Json.NET 中的 RawJSON 对象

转载 作者:太空宇宙 更新时间:2023-11-03 11:11:48 27 4
gpt4 key购买 nike

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

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

示例:

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这样的对象)

Request req = JsonConvert.DeserializeObject<Request>(s);
if( req.Method == "whisper" )
{
Whisper whisper = RawJson.DeserializeObject<Whisper>();
whisper.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());
}

关于c# - Json.NET 中的 RawJSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13718638/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com