在实际项目开发中,我们经常用到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);
}
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>