详解如何动态调用WebService传递复杂对象的实现
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?详解如何动态调用WebService传递复杂对象的实现
项目需要用到外部提供的WebService,由于WebService的地址不固定,因此,采用动态调用的方式。 动态代理会自动生成自己的对象,无法通过强制转换实现调用。 解决办法: 1 传递对象为简单类型(string) 调用webservice方法成功之后,返回对象之前,对复杂对象进行xml序列化 返回对象中包含List结构 1:[Serializable]2:publicclassQuestionEditList : BaseModel3:{4:privateList?_questionEditList =newList();5: 6:publicListQuesEditList7:{8:get {return_questionEditList ; }9:set { _questionEditList =value; }10:}11:publicQuestionEditList(ListquestionEditList)12:{13:this._questionEditList= questionEditList;14: 15:}16:publicoverridevoidFromXml(stringxml)17:{18:QuestionEditList question = (QuestionEditList)base.DeserializeFromXml(xml,typeof(QuestionEditList));19:this.QuesEditList = question.QuesEditList;20:}21: 22:publicoverridestringToXml()23:{24:returnbase.SerializeToXml(this);25:}26:}序列化后的结果:102030 2 调用方拿到返回值,在进行xml反序列化 1:QuestionEditList questionList =newQuestionEditList();2:questionList.FromXml(obj.ToString());通过这样的方式传递,就可以获取到可以控制的对象。 序列化,反序列化方法1 序列化 1:protectedstringSerializeToXml(objecto)2:{3:XmlSerializer serializer =newXmlSerializer(o.GetType(),"");4:MemoryStream w =newMemoryStream();5:XmlTextWriter writer =newXmlTextWriter(w,Encoding.Default);6:writer.Formatting = Formatting.None;7:serializer.Serialize((XmlWriter)writer,o);8:writer.Close();9:returnEncoding.Default.GetString(w.ToArray()).Replace("xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"","").Replace("","");10:} 2 反序列化 1:protectedobjectDeserializeFromXml(strings,Type t)2:{3:XmlSerializer serializer =newXmlSerializer(t);4:objectobj2 =null;5:XmlTextReader xmlReader =newXmlTextReader(s,XmlNodeType.Element,null);6:obj2 = serializer.Deserialize(xmlReader);7:xmlReader.Close();8:returnobj2;9:} 原文链接:http://code.01yun.com/asp0dm/asp0net0dm/20110604/52724.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |