6

JSON 文字列を C# メソッドの呼び出しにマップするフレームワークを実装したいと考えています。たとえば、以下のように定義された C# クラス Calculator があります。

// C# class
class Calculator
{
public:
    int add (int x, int y);
    int sub (int x, int y);
}

以下のような JSON 文字列があります。フレームワークがこの文字列を受け取ると、クラス Calculator のオブジェクトを作成/新規作成します。次に、その関数 add を呼び出します。そして、値 12 と 43 をパラメーターとして関数に渡します。

// JSON string
"{
\"class\":\"Calculator\",
\"method\":\"add\",
\"parameters\": {
    \"x\" : \"12\", \"y\" : \"43\"
    }
}"

これを実装するサードパーティのライブラリはありますか? または、どうすれば自分で実装できますか?

4

1 に答える 1

11

小さな作業サンプル。もちろん、多くのチェックが欠けています。( 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 });

-

class Calculator
{
    public int add(int x, int y)
    {
        return x + y;
    }
}
于 2012-08-16T12:30:32.220 に答える