java webservice 泛型_解决WebService 中泛型接口不能序列化问题

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

24a924a57ba6b3f2b51fc9edb7ea4186.png1   [WebMethod]

2         public IList 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 list = new List();

12             list.Add(em1);

13             list.Add(em2);

14             return list;

15

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

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

24a924a57ba6b3f2b51fc9edb7ea4186.png1  /// 

2         /// List泛型集合替代IList

3         /// 

4         /// 

5         [WebMethod]

6         public List 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 list = new List();

16             list.Add(em1);

17             return list;

18         }

19

20         /// 

21         /// 以二进制形式进行传递,客户端需进行返序列化

22         /// 

23         /// 

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 list = new List();

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

客户端反序列化代码

24a924a57ba6b3f2b51fc9edb7ea4186.png1     protected void  CallService()

2     {

3         WebService ws = new WebService();

4         byte[] bs = ws.GetEmployeeListByteArray();

5         IList list = null;

6         try

7         {

8             MemoryStream ms = new MemoryStream(bs);    //创建Memory流对象

9             BinaryFormatter formatter = new BinaryFormatter();

10             list = (List)formatter.Deserialize(ms);    //反序列化

11         }

12         catch (Exception ex)

13         {

14             Response.Write("");

15         }

16

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

24a924a57ba6b3f2b51fc9edb7ea4186.png1  [WebMethod]

2         [XmlInclude(typeof(Employee))]

3         public IList GetArticleList()

4         {

5             IList result = new ArrayList();

6             for (int i = 0; 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值