gpt4 book ai didi

c# - JSON反序列化。

转载 作者:太空宇宙 更新时间:2023-11-03 16:00:08 25 4
gpt4 key购买 nike

我有一个简单的 WCF RESTful 服务,只有一个操作将字符串作为参数 void Process(string item) . item是一个 JSON 序列化对象,它可以是任何东西。

在这种特殊情况下,可以将大约 20 个不同的类发送到该服务。反序列化这些对象的正确且方便的方法是什么?我怎么知道 JSON 背后到底是什么?我可以包括一些 Type字段并执行类似使用 Json.NET 的操作:

dynamic json = JsonConvert.DeserializeObject(input);

,检查 json.Type然后使用 JsonConvert.DeserializeObject<T>() 反序列化输入字符串,但我不确定这是个好主意。你有什么想法吗?

最佳答案

虽然我会像评论中提到的那样将 WCF 与许多 OperationContract 方法一起使用,但动态方式也是可能的。别忘了,省略了很多检查,还有很大的改进空间。只需将其视为 POC 工作即可。

假设您有一个要在其上执行方法的服务器对象。

public class ServerClass1
{
public int Add(int i,int j)
{
return i + j;
}

public string Hello()
{
return "HELLO";
}
}

并且您以某种方式接收到这些 json 并动态执行

req1 : {"method":"Add","parameters":[3,5]}

var res1 = Exec(req1, new ServerClass1());

请求 2: {"method":"Hello","parameters":null}

var res2 = Exec(req2, new ServerClass1());

辅助方法/类

public class Request
{
public string method;
public object[] parameters;
}

public static object Exec(string json, object target)
{
var req = JsonConvert.DeserializeObject<Request>(json);

var method = target.GetType().GetMethod(req.method, BindingFlags.Public | BindingFlags.Instance);
if (method == null) throw new InvalidOperationException();

object[] parameters = new object[0];
if (req.parameters != null)
{
parameters = method.GetParameters().Zip(req.parameters, (m, p) => Convert.ChangeType(p, m.ParameterType)).ToArray();
}

return method.Invoke(target, parameters);
}

关于c# - JSON反序列化。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21834050/

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