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

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

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

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

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

客户端反序列化代码

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

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

 1  [WebMethod]
 2         [XmlInclude(typeof(Employee))]
 3         public IList GetArticleList()
 4         {
 5             IList result = new ArrayList();
 6             for (int i = 0; i < 20; i++)
 7             {
 8                 DateTime time = DateTime.Now.AddDays(i);
 9                 Employee em = new Employee();
10                 em.LastName = "jack";
11                 em.EmployeeID = 11;
12                 result.Add(em);
13             }
14             return result;
15         }
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. omDialog设计造成控件无法后台取值

    http://ui.operamasks.org/website/homepage.html 使用服务端控件,前台进行赋值,但后台确无法取值. 不仅如此,如果里面放置了一个ASp:Button同样无法 ...

  2. PrintWriter的println问题

    今天发现一个奇怪的问题,同样的代码web server部署在windows自测机器上跟linux服务器上, 在通信上出现了不一样的换行结束符. Debug发现通过PrintWriter的println ...

  3. 查看Linux下端口占用情况的命令

    在使用Linux系统的过程中,有时候会遇到端口被占用而导致服务无法启动的情况.比如HTTP使用80端口,但当启动Apache时,却发现此端口正在使用. 这种情况大多数是由于软件冲突.或者默认端口设置不 ...

  4. 四 AndEngine 画线

    package com.example.AndEngineExample02; import org.anddev.andengine.engine.Engine;import org.anddev. ...

  5. Shell教程4-Shell替换

    如果表达式中包含特殊字符,Shell 将会进行替换.例如,在双引号中使用变量就是一种替换,转义字符也是一种替换. 举个例子: 复制纯文本新窗口   #!/bin/bash a=10 echo -e & ...

  6. Aspose.Cells 读取Excel数据到DataTable

    C#代码: Workbook workbook = new Workbook(); workbook.Open(excelfile); Cells cells = workbook.Worksheet ...

  7. 嵌入式 H264中的SPS、PPS提取与作用

    使用RTP传输H264的时候,需要用到sdp协议描述,其中有两项:Sequence Parameter Sets (SPS) 和Picture Parameter Set (PPS)需要用到,那么这两 ...

  8. C# 对Excel文档打印时的页面设置

    1.对打印页面的朝向,页宽,页高进行设置 参考源码[1] using Excel = Microsoft.Office.Interop.Excel; Excel.Application tmpExce ...

  9. Linux基本命令(9)定位、查找文件的命令

    定位.查找文件的命令 命令 功能 命令 功能 which 从path中找出文件的位置 find 找出所有符合要求的文件 whereis 找出特定程序的路径 locate 从索引中找出文件位置 9.1 ...

  10. jquery的一些技巧总结

    1.使用方法在需要使用JQuery的页面中引入JQuery的js文件即可.例如:<script type="text/javascript" src="js/jqu ...