在实际项目开发中,我们经常用到List<T> GetList<T>(xxxx), int Save<T>(T t) ,T GetData<T>(int id)这样的方法
如果WCF服务发布这些的服务,我们在客户端调用就方便太多,但是WCF不支持这样的服务契约。
所以,我在实际项目中,做了一下变通,解决方案如下:
1.接口定义
[OperationContract]
int SaveData(string type, string data);2.接口实现
public int SaveData(string type,string data)
{ MethodInfo method1 = typeof(JsonHelper).GetMethod("GetJsonData").MakeGenericMethod(Type.GetType(type)); object obj = method1.Invoke(null, new object[] { data }); // 调用JsonHelper.GetJsonData<T>(T t)方法 MethodInfo method2 = typeof(ORMHelper).GetMethod("SaveData").MakeGenericMethod(obj.GetType()); return int.Parse(method2.Invoke(null, new object[] { obj })); //调用ORMHelper.SaveData<T>(T t)方法 }3.客户端实现
public static int SaveData<T>(T data) where T : new()
{ string type = typeof(T).AssemblyQualifiedName; string jsonData = JsonHelp.GetJsonString(data); return WcfServices.SaveData(type, jsonData); }