本来要定义WebServices 方法返回一泛型接口集合IList,系统提示不能序列化泛型接口集合

  1.  1   [WebMethod]
  2.  2         public IList<Employee> GetEmployeeList()
  3.  3         {
  4.  4             IFormatter formatter = new SoapFormatter();
  5.  5             MemoryStream mStream = new MemoryStream();
  6.  6 
  7.  7             Employee em1 = new Employee();
  8.  8             em1.EmployeeID = 1;
  9.  9             em1.FirstName = "jack";
  10. 10             em1.LastName = "josn";
  11. 11             IList<Employee> list = new List<Employee>();
  12. 12             list.Add(em1);
  13. 13             list.Add(em2);
  14. 14             return list;
  15. 15 

参考了相关的资料,可以有两种解决办法,一:用List<>泛型集合替代IList<>泛型接口集合。

二.将List<>泛型集合序列化为二进制形式,进行传递。

  1.  1  /// <summary>
  2.  2         /// List泛型集合替代IList
  3.  3         /// </summary>
  4.  4         /// <returns></returns>
  5.  5         [WebMethod]
  6.  6         public List<Employee> GetEmployeeList()
  7.  7         {
  8.  8             IFormatter formatter = new SoapFormatter();
  9.  9             MemoryStream mStream = new MemoryStream();
  10. 10 
  11. 11             Employee em1 = new Employee();
  12. 12             em1.EmployeeID = 1;
  13. 13             em1.FirstName = "jack";
  14. 14             em1.LastName = "josn";
  15. 15             List<Employee> list = new List<Employee>();
  16. 16             list.Add(em1);
  17. 17             return list;
  18. 18         }
  19. 19 
  20. 20         /// <summary>
  21. 21         /// 以二进制形式进行传递,客户端需进行返序列化
  22. 22         /// </summary>
  23. 23         /// <returns></returns>
  24. 24         [WebMethod]
  25. 25         public byte[] GetEmployeeListByteArray()
  26. 26         {
  27. 27             Employee em1 = new Employee();
  28. 28             em1.EmployeeID = 1;
  29. 29             em1.FirstName = "jack";
  30. 30             em1.LastName = "josn";
  31. 31             IList<Employee> list = new List<Employee>();
  32. 32             list.Add(em1);
  33. 33             IFormatter formatter = new BinaryFormatter();
  34. 34             MemoryStream mStream = new MemoryStream();
  35. 35             byte[] bs;
  36. 36             if (list != null)
  37. 37             {
  38. 38                 formatter.Serialize(mStream,list);
  39. 39                 bs = mStream.ToArray();
  40. 40             }
  41. 41             else
  42. 42             {
  43. 43                 bs = new byte[0];
  44. 44             }
  45. 45             return bs; 
  46. 46 

客户端反序列化代码

  1.  1     protected void  CallService()
  2.  2     {
  3.  3         WebService ws = new WebService();
  4.  4         byte[] bs = ws.GetEmployeeListByteArray();
  5.  5         IList<Employee> list = null;
  6.  6         try
  7.  7         {
  8.  8             MemoryStream ms = new MemoryStream(bs);    //创建Memory流对象
  9.  9             BinaryFormatter formatter = new BinaryFormatter();
  10. 10             list = (List<Employee>)formatter.Deserialize(ms);    //反序列化
  11. 11         }
  12. 12         catch (Exception ex)
  13. 13         {
  14. 14             Response.Write("<script language='javaScript'>alert('"+ex.Message+"');</script>");
  15. 15         }
  16. 16 

非泛型集合的IList接口进行传递时,只需在方法前标识[XmlInclude(typeof(类型)]即可。

  1.  1  [WebMethod]
  2.  2         [XmlInclude(typeof(Employee))]
  3.  3         public IList GetArticleList()
  4.  4         {
  5.  5             IList result = new ArrayList();
  6.  6             for (int i = 0; i < 20; i++)
  7.  7             {
  8.  8                 DateTime time = DateTime.Now.AddDays(i);
  9.  9                 Employee em = new Employee();
  10. 10                 em.LastName = "jack";
  11. 11                 em.EmployeeID = 11;
  12. 12                 result.Add(em);
  13. 13             }
  14. 14             return result;
  15. 15         }
  16. 16 

解决WebService 中泛型接口不能序列化问题的更多相关文章

  1. 解决WebService中System.InvalidOperationException:缺少参数的问题

    此问题在.Net 4.0 IIS7 Windows Server 2008下可能会出现. 现象是第一次正常调用,第二次接口报错. 删除CacheDuration即可.

  2. WebService中方法的重载

    阅读目录 一:WebService中的方法是否允许重载? 二:为什么WebService中不支持方法的重载? 三:如何解决WebService中方法的重载? 一:WebService中的方法是否允许重 ...

  3. WebService中使用自定义类的解决方法(5种)

    转自:http://www.cnblogs.com/lxinxuan/archive/2007/05/24/758317.html Demo下载:http://files.cnblogs.com/lx ...

  4. 解决nodejs中json序列化时Date类型默认为UTC格式

    在nodejs中,json序列化时Date类型时,默认转为UTC格式. 如下图 上面只是一个例子,下面我用一个更具体化的例子来展示一个这个情况,我们在开发WEB项目中,经常用到Express组件, 我 ...

  5. 解决nodejs中json序列化时Date类型为UTC格式

    在nodejs中,json序列化时Date类型时,默认转为UTC格式. 如下图 zhupengfei@DESKTOP-HJASOE3 MINGW64 /d/MyProject/exp2 $ node ...

  6. 处理 WebService 中的 Map 对象

    最近,我们讨论了关于 WebService 的相关问题.目前在 Smart 中,可发布两种类型的 WebService,它们是:SOAP 服务 与 REST 服务,您可以根据需要自由选择. 今天,我要 ...

  7. C# Webservice中如何实现方法重载--(方法名同名时出现的问题)

    本文摘抄自:http://blog.sina.com.cn/s/blog_53b720bb0100voh3.html 1.Webservice中的方法重载问题(1)在要重载的WebMethod上打个M ...

  8. WebService中方法的相关注意事项

    2014-11-14 在WebService中定义方法,有一些注意的地方: (1) 方法上面需要增加 [WebMethod] 属性,标志该方法是一个WebService方法: (2)方法的返回值可以为 ...

  9. 在asp.net webservice中如何使用session

    原文:在asp.net webservice中如何使用session 原文:刘武|在asp.net webservice中如何使用session 在使用asp.net编写webservice时,默认情 ...

随机推荐

  1. string tips

    1. .net文档中说,split 比 indexOf 消耗更多的性能.在as3中经过本人测试,这个结论一样成立.而且,字符串越长,split和indexOf的差距就越明显!!所以,能用indexOf ...

  2. 平时学习HTML5及其安全相关的一些站点资源

    http://www.w3.org/ -- HTML5一切标准都来自这里,如果你是发烧级HTML5患者,就读这个http://www.whatwg.org -- 和W3分分合合,最终共同指定HTML5 ...

  3. php 格式化数字 位数不足前面加0补足

    本文引用自 http://www.fengfly.com/plus/view-62827-1.html 补0: <?php $var = sprintf("%03d", 12 ...

  4. jquery事件学习笔记(转载)

    一.页面载入1.ready(fn)当DOM载入就绪可以查询及操纵时绑定一个要执行的函数.这是事件模块中最重要的一个函数,因为它可以极大地提高web应用程序的响应速度. 简单地说,这个方法纯粹是对向wi ...

  5. Effective java笔记8--序列化

    对象的序列化(object serialization)API,它提供了一个框架,用来将对象编码成一个字节流,以及从字节流编码中重新构建对象. 一.谨慎地实现Serializable     要想使一 ...

  6. 搭建Eclipse、Resin Web开发环境

    搭建Eclipse.Resin Web开发环境 一.当然是安装java开发环境 参看: Java环境的搭建 http://www.cnblogs.com/ghj1976/archive/2010/04 ...

  7. python27+django调用数据库

    我用的mysql版,先上无模板的版本,在views里加上 import MySQLdb 然后在下方写函数 def use_databases(request): db = MySQLdb.connec ...

  8. BITED-Windows8应用开发学习札记之四:如何在Win8 应用中实现语义缩放

    语意缩放的意义在于:创新的语意缩放外观,让你的应用随时展现信息可视化的力量.如图表般的Tile,随着数据的不同而变化,让你的页面更富节奏.而所谓的语意缩放就是通过上下文的跳转,帮助我们实现一种更快更便 ...

  9. Python【基础第四篇】

    一.迭代器(iterator) 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退. ...

  10. 快速入门linux系统的iptables防火墙 1 本机与外界的基本通信管理

    概述 iptables是一种运行在linux下的防火墙组件,下面的介绍可以快速的学习iptables的入门使用. 特点(重要) 它的工作逻辑分为 链.表.规则三层结构. 数据包通过的时候,在对应表中, ...