雖然我會在註釋中提到的使用許多OperationContract方法的WCF,但動態方法也是可以的。不要忘記,許多支票都被省略了,並且有很大的改進空間。只是把它當作POC工作。
假設您有一個服務器對象來執行方法。
public class ServerClass1
{
public int Add(int i,int j)
{
return i + j;
}
public string Hello()
{
return "HELLO";
}
}
,你莫名其妙地收到了這些jsons和動態執行
REQ1:{"method":"Add","parameters":[3,5]}
var res1 = Exec(req1, new ServerClass1());
REQ 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);
}
的可能重複的[反序列化JSON到C#動態對象?](http://stackoverflow.com/questions/3142495/deserialize-json-into-c-sharp-dynamic -object) – celerno
你用JSON.net卡住了嗎?你不能使用4.5中的WCF中的自動序列化嗎? – crush
您還沒有明確說明爲什麼您需要接受20個不同的「對象」作爲單個OperationContract的參數,但我猜測您正在濫用OperationContract。如果您製作了多個OperationContracts,則每個接受您所期望的參數類型可能是最好的。 – crush