网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > DotNet > XML&Web > WebService中使用自定义类的解决方法  

WebService中使用自定义类的解决方法

2007-05-25  作者:bitsCN整理  来源:中国网管联盟  点评 投稿 收藏

           所谓自定义类,不知道我有没有表达清楚,这里指的就是petshop中的Model层实体类了。
         比如以下代码:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text; 网管u家u.bitsCN.com

namespace Model
{ 网管网www_bitscn_com
    [Serializable]
    
public class Student
    
{
中国网管论坛bbs.bitsCN.com

        
private string stuName;

        
public Student()
        
{ } 网管u家u.bitscn@com

        
public string StuName
        
{ 网管下载dl.bitscn.com
            
get return this.stuName; }

网管bitscn_com


            
set this.stuName = value; }
中国网管联盟bitsCN.com

        }

    }

}


         webservice传递的内容必须是可序列化的,不管是参数还是返回值。上面定义的实体类Student,在类定义之前标示了[Serializable],指明可序列化的。但当涉及到实体类集合的时候,如果使用IList<Student>来表示,就会抱错,原因是IList是不可以序列化的,这种情况下,我们就可以使用System.Collections.ObjectModel.Collection<Student>来表示一个实体类集合。这里给出了两种可能出现的实体类和实体类集合,以下就开始说明各种解决方法:
网管u家u.bitscn@com


         1、把实体类集合,作为Object[]传递。
      这种情况下,我们必须使用webservice中的实体类,传递的是实体类集合对应的Object[]传递,WebService中方法的参数类型是ArrayList。
比如WebService中的方法是:
[XmlInclude(typeof(Student))]
        [WebMethod]
        
public string HelloStus(ArrayList stuList)

中国网管联盟bitsCN.com


        
{

中国网管联盟bitsCN.com


            BLL.Class1 cls 
= new BLL.Class1();
            
return cls.GetName(stuList);
        }
         别漏了[XmlInclude(typeof(Student))]这一行,不然在表现层就引用不到WebService中的实体类了。
这个时候,在表现层添加web引用,表现层中的调用代码如下:(参考Demo中的button1_Click()方法)
网管u家u.bitsCN.com

/// <summary>
        /// 必须使用webservice中的实体类,传递实体类集合,作为Object[]传递,WebService中的参数类型是ArrayList,并提供一个将集合转化为Object[]的公共类
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            string str = "";
中国网管论坛bbs.bitsCN.com

            localhost.Student stuInfo1 = new localhost.Student();
            stuInfo1.StuName = "lxinxuan";
            localhost.Student stuInfo2 = new localhost.Student();
            stuInfo2.StuName = "www.cnblogs.com/lxinxuan";
网管网www.bitscn.com

            IList<localhost.Student> stuList = new List<localhost.Student>();
            stuList.Add(stuInfo1);
            stuList.Add(stuInfo2);
网管论坛bbs_bitsCN_com

            object[] array = this.ConvertToArray<localhost.Student>(stuList);//这是一个将集合转换为Objec[]的泛型方法
            str = ser.HelloStus(array);//传递Object[],返回值是StuName的值

网管bitscn_com

            MessageBox.Show(str);
        }
//这是一个将集合转换为Objec[]的泛型方法
 private object[] ConvertToArray<T>(IList<T> tList)
        {
            object[] array = new object[tList.Count];
            int i = 0;
            foreach (T t in tList)
            {
                array[i] = t;
                i++;
            }
            return array; 网管u家u.bitscn@com
        }

中国网管论坛bbs.bitsCN.com

 

网管bitscn_com

网管u家u.bitsCN.com


TAGs   方法   解决   定义   使用       <   实体   ///    传递   >      
 上一篇:Web Service 中的身份验证策略   下一篇:页面元素可拖拽放置的实现原理
WebService中使用自定义类的解决方法 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
最新推荐文章:
网管论坛交流: