变通一下,让WCF支持泛型方法

在实际项目开发中,我们经常用到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>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值