我想实现一个框架来将JSON字符串映射到C#方法的调用.例如,我有一个C#类计算器定义如下.
// C# class
class Calculator
{
public:
int add (int x, int y);
int sub (int x, int y);
}
Run Code Online (Sandbox Code Playgroud)
下面有一个JSON字符串.当框架收到此字符串时,它会创建/ new类Calculator的对象.然后调用它的函数add.并将值12和43作为参数传递给函数.
// JSON string
"{
\"class\":\"Calculator\",
\"method\":\"add\",
\"parameters\": {
\"x\" : \"12\", \"y\" : \"43\"
}
}"
Run Code Online (Sandbox Code Playgroud)
有没有第三方库来实现这个?或者我如何自己实施?
一个小的工作样本.当然缺少许多支票.(使用Json.Net)
string jsonstring = "{\"class\":\"Calculator\",\"method\":\"add\",\"parameters\": { \"x\" : \"12\", \"y\" : \"43\" }}";
var json = (JObject)JsonConvert.DeserializeObject(jsonstring);
Type type = Assembly.GetExecutingAssembly()
.GetTypes()
.First(t => t.Name==(string)json["class"]);
object inst = Activator.CreateInstance(type);
var method = type.GetMethod((string)json["method"]);
var parameters = method.GetParameters()
.Select(p => Convert.ChangeType((string)json["parameters"][p.Name], p.ParameterType))
.ToArray();
var result = method.Invoke(inst, parameters);
var toReturn = JsonConvert.SerializeObject(new {status="OK",result=result });
Run Code Online (Sandbox Code Playgroud)
-
class Calculator
{
public int add(int x, int y)
{
return x + y;
}
}
Run Code Online (Sandbox Code Playgroud)