知识大全 WebService中使用自定义类的解决方法
Posted 知
篇首语:古之立大事者,不惟有超世之才,亦必有坚忍不拔之志。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 WebService中使用自定义类的解决方法相关的知识,希望对你有一定的参考价值。
WebService中使用自定义类的解决方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
所谓自定义类 不知道我有没有表达清楚 这里指的就是petshop中的Model层实体类了 比如以下代码 using System;using System Collections;using System Collections Generic;using System Text;namespace Model [Serializable] public class Student private string stuName; public Student() public string StuName get return this stuName; set this stuName = value; webservice传递的内容必须是可序列化的 不管是参数还是返回值 上面定义的实体类Student 在类定义之前标示了[Serializable] 指明可序列化的 但当涉及到实体类集合的时候 如果使用IList<Student>来表示 就会抱错 原因是IList是不可以序列化的 这种情况下 我们就可以使用System Collections ObjectModel Collection<Student>来表示一个实体类集合 这里给出了两种可能出现的实体类和实体类集合 以下就开始说明各种解决方法 把实体类集合 作为Object[]传递 这种情况下 我们必须使用webservice中的实体类 传递的是实体类集合对应的Object[]传递 WebService中方法的参数类型是ArrayList 比如WebService中的方法是 [XmlInclude(typeof(Student))] [WebMethod] public string HelloStus(ArrayList stuList) BLL Class cls = new BLL Class (); return cls GetName(stuList); 别漏了[XmlInclude(typeof(Student))]这一行 不然在表现层就引用不到WebService中的实体类了 这个时候 在表现层添加web引用 表现层中的调用代码如下 (参考Demo中的button _Click()方法)/// <summary> /// 必须使用webservice中的实体类 传递实体类集合 作为Object[]传递 WebService中的参数类型是ArrayList 并提供一个将集合转化为Object[]的公共类 /// </summary> /// <param name= sender ></param> /// <param name= e ></param> private void button _Click(object sender EventArgs e) string str = ;
localhost Student stuInfo = new localhost Student(); stuInfo StuName = lxinxuan ; localhost Student stuInfo = new localhost Student(); stuInfo StuName = /lxinxuan ;
IList<localhost Student> stuList = new List<localhost Student>(); stuList Add(stuInfo ); stuList Add(stuInfo );
object[] array = this ConvertToArray<localhost Student>(stuList);//这是一个将集合转换为Objec[]的泛型方法 str = ser HelloStus(array);//传递Object[] 返回值是StuName的值
MessageBox Show(str); //这是一个将集合转换为Objec[]的泛型方法 private object[] ConvertToArray<T>(IList<T> tList) object[] array = new object[tList Count]; int i = ; foreach (T t in tList) array[i] = t; i++; return array;
传递单个实体类 使用WebService中的实体类这种情况下 可以看作是情况 的特例——只有一个元素的数组 当然 这种情况下我们可以换一种做法——使用WebService中的实体类 先看webservice中的代码
[XmlInclude(typeof(Student))] [WebMethod] public string HelloStu(Student stuInfo) return stuInfo StuName; 同样必须添加这一行代码[XmlInclude(typeof(Student))] 然后调用代码是 /**//// <summary> /// 传递单个实体类 使用WebService中的实体类 /// </summary> /// <param name= sender ></param> /// <param name= e ></param> private void button _Click(object sender EventArgs e) string str = ; localhost Student stuInfo = new localhost Student();//注意 这里调用了webservice中的实体类 而不是Model中的实体类 否则出错 stuInfo StuName = lxinxuan ; str = ser HelloStu(stuInfo );//传递webservice中的实体类 MessageBox Show(str); 传递实体类构成的Collection 这是和情况 类似的情形 只是传递的类型不一样 可以对照一下 这种情况下 必须通过修改Reference cs的代码 不过每次更新都要重新修改 而且必须每个类修改 比较麻烦!不推荐使用 这不知道是哪位仁兄想出来的方法 我也是看了人家的做法才总结出来的 不过能去修改Reference cs的代码 已经说明钻研精神了 鼓励下 同样先给出webservice中方法的代码 [WebMethod] public string HelloStusByList(Collection<Student> stuList)//这里参数类型是Collection BLL Class cls = new BLL Class (); return cls GetName(stuList); 方法的参数是Collection 在添加了webservice之后 Reference cs中的对应方法的参数变成了student[] 数组!!webservice和数组走得真近阿 这里将Reference cs中的方法HelloStusByList的参数类型student[]改为Collection<localhost Student> 如下所示 表示层调用代码 /**//// <summary> /// 传递实体类构成的Collection 通过修改Reference cs的代码 不过每次更新WebService之后都要重新修改 而且必须每个类修改 麻烦 /// </summary> /// <param name= sender ></param> /// <param name= e ></param> private void button _Click(object sender EventArgs e) string str = ; localhost Student stuInfo = new localhost Student(); stuInfo StuName = lxinxuan ; localhost Student stuInfo = new localhost Student(); stuInfo StuName = /lxinxuan ; Collection<localhost Student> stuList = new Collection<localhost Student>(); stuList Add(stuInfo ); stuList Add(stuInfo ); str = ser HelloStusByList(stuList);//默认情况下 这里HelloStusByList方法的参数是Student[] 通过手动修改为Collection 就可以了 MessageBox Show(str);先将实体类集合序列化为表现为xml格式的string 然后在webservice中反序列化成Collection<>(注意 不可以是IList<>) 然后再传递给业务层对象
[WebMethod] public string HelloStusByCollection(string sXml) BLL Class cls = new BLL Class (); Collection<Student> stuList = cls DeSerializerCollection<Student>(sXml typeof(Collection<Student>));//先反序列化为Collection return cls GetName(stuList); DeserializerCollection方法代码如下 /**//// <summary> /// /// </summary> /// <typeparam name= T ></typeparam> /// <param name= sXml ></param> /// <param name= type ></param> /// <returns></returns> public Collection<T> DeSerializerCollection<T>(string sXml Type type) XmlReader reader = XmlReader Create(new StringReader(sXml)); System Xml Serialization XmlSerializer serializer = new System Xml Serialization XmlSerializer(type); object obj = serializer Deserialize(reader); return (Collection<T>)obj; 表现层调用代码如下 /**//// <summary> /// 先将实体类集合序列化为string 然后在webservice中反序列化成Collection<> 然后再传递给业务层对象 /// </summary> /// <param name= sender ></param> /// <param name= e ></param> private void button _Click(object sender EventArgs e) string str = ; Student stuInfo = new Student(); stuInfo StuName = lxinxuan ; Student stuInfo = new Student(); stuInfo StuName = /lxinxuan ; Collection<Student> stuList = new Collection<Student>(); stuList Add(stuInfo ); stuList Add(stuInfo ); string stuString = this Serializer<Collection<Student>>(stuList);//先序列化为xml文件格式的string str = ser HelloStusByCollection(stuString); MessageBox Show(str); Serialize方法代码如下 /**//// <summary> /// 实体类集合序列化为字符串 /// </summary> /// <typeparam name= T ></typeparam> /// <param name= objToXml ></param> /// <returns></returns> public string Serializer<T>(T objToXml) System IO StringWriter writer = new System IO StringWriter(); System Xml Serialization XmlSerializer serializer = new System Xml Serialization XmlSerializer(objToXml GetType()); serializer Serialize(writer objToXml); return writer GetStringBuilder() ToString(); 这种情况就是情况 的特例 序列化一个实体类并传递 方法类似 就不写出来 参见Demo代码 大概就是这些了 当然传递DataSet是最传统最好的办法了 呵呵~ cha138/Article/program/net/201311/13064相关参考
这篇文章介绍了在javascript中自定义对象的属性方法有需要的朋友可以参考一下 首先介绍下关联数组复制代码代码如下:<script>vartest=newObject()
如何在Microsoft.NET中自定义配置文件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
在DNN4.X中自定义登录界面 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 有时候我们需要自定
知识大全 Oracle中自定义函数 无参数 输入参数 输出参数
Oracle中自定义函数无参数输入参数输出参数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!lis
知识大全 ASP.NET中自定义DataGrid分页设置的实现
ASP.NET中自定义DataGrid分页设置的实现 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
publicvoidconfigure(TypetypePropertiesparamsDialectd)throwsMappingExceptionStringtable=paramsgetProp
Hibernate(目前使用的版本是)中提供了多种生成主键的方式 然而当前的这么多种生成方式未必能满足我们的要求 比如increment可以在一个hibernate实例的应用上很方便的时候但是
Hibernate(目前使用的版本是)中提供了多种生成主键的方式 然而当前的这么多种生成方式未必能满足我们的要求 比如increment可以在一个hibernate实例的应用上很方便的时候但是
微软NET战略的一个比较重要的部分就是webservice利用webservice我们可以创建真正有效的分布式应用程序 下面我们对webservice做一些说明 假设A是客户端B是webser
知识大全 PHP5 在调用 JAVA WebService 时遇到的各种问题解决方法
PHP5在调用JAVAWebService时遇到的各种问题解决方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一