动态调用WebService复杂对象传递
来源:互联网 发布:windows 8菜单栏不见了 编辑:程序博客网 时间:2024/04/28 23:43
项目需要用到外部提供的WebService,由于WebService的地址不固定,因此,采用动态调用的方式。
具体的调用方式,参考园子的文章:
1 动态调用 WebService
2 【转】动态调用WebService
代码没有什么问题,功能也可以实现,但是在传递复杂对象的时候,问题出来了。动态代理会自动生成自己的对象,无法通过强制转换实现调用。
解决办法:
1 传递对象为简单类型(string)
调用webservice方法成功之后,返回对象之前,对复杂对象进行xml序列化
返回对象中包含List结构
1: [Serializable]
2: public class QuestionEditList : BaseModel
3: {
4: private List _questionEditList = new List();
5:
6: public List QuesEditList
7: {
8: get { return _questionEditList ; }
9: set { _questionEditList = value; }
10: }
11: public QuestionEditList(List questionEditList)
12: {
13: this._questionEditList= questionEditList;
14:
15: }
16: public override void FromXml(string xml)
17: {
18: QuestionEditList question = (QuestionEditList)base.DeserializeFromXml(xml, typeof(QuestionEditList));
19: this.QuesEditList = question.QuesEditList;
20: }
21:
22: public override string ToXml()
23: {
24: return base.SerializeToXml(this);
25: }
26: }
序列化后的结果:
<QuestionEditList><QuesEditList><QuestionEditModel><MajorQuestionID>1</MajorQuestionID><MinorQuestionID>0</MinorQuestionID></QuestionEditModel><QuestionEditModel><MajorQuestionID>2</MajorQuestionID><MinorQuestionID>0</MinorQuestionID></QuestionEditModel><QuestionEditModel><MajorQuestionID>3</MajorQuestionID><MinorQuestionID>0</MinorQuestionID></QuestionEditModel></QuesEditList></QuestionEditList>
2 调用方拿到返回值,在进行xml反序列化
1: QuestionEditList questionList = new QuestionEditList();
2: questionList.FromXml(obj.ToString());
通过这样的方式传递,就可以获取到可以控制的对象。
序列化,反序列化方法
1 序列化
1: protected string SerializeToXml(object o)
2: {
3: XmlSerializer serializer = new XmlSerializer(o.GetType(), "");
4: MemoryStream w = new MemoryStream();
5: XmlTextWriter writer = new XmlTextWriter(w, Encoding.Default);
6: writer.Formatting = Formatting.None;
7: serializer.Serialize((XmlWriter)writer, o);
8: writer.Close();
9: return Encoding.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: protected object DeserializeFromXml(string s, Type t)
2: {
3: XmlSerializer serializer = new XmlSerializer(t);
4: object obj2 = null;
5: XmlTextReader xmlReader = new XmlTextReader(s, XmlNodeType.Element, null);
6: obj2 = serializer.Deserialize(xmlReader);
7: xmlReader.Close();
8: return obj2;
9: }
希望可以给大家带来帮助,,如有问题,欢迎讨论!
- 动态调用WebService复杂对象传递
- 详解如何动态调用WebService传递复杂对象的实现
- CXF WebService中传递复杂类型对象 .
- CXF WebService中传递复杂类型对象
- CXF WebService中传递复杂类型对象
- WebService-AXIS高级特性 传递复杂对象
- CXF WebService 4 传递复杂类型对象
- CXF WebService中传递复杂类型对象
- CXF WebService中传递复杂类型对象
- 实验讨论Atlas调用WebService时的复杂类型传递
- WebService(3)-AXIS高级特性 传递复杂对象
- 四、CXF WebService中传递复杂类型对象
- 四、CXF WebService中传递复杂类型对象
- 三、CXF WebService中传递复杂类型对象
- 四、CXF WebService中传递复杂类型对象
- WebService体系之——复杂对象的传递
- 四、CXF WebService中传递复杂类型对象
- c# 调用webservice传递序列化对象
- Oracle EM 常见问题总结
- C#项目中的bin目录和obj目录的区别,以及Debug版本和Release版本的区别
- [转]Web测试中的界面测试用例设计
- ARM汇编指令的一些总结
- GetModuleFileName
- 动态调用WebService复杂对象传递
- php页面读取到数据库字段值对其进行html编码
- OnEraseBkGnd和OnPaint的联系(转自CSDN论坛一帖子)
- InitCommonControlsex
- 【转】如何使用离线博客发布工具发布CSDN的博客文章 - 山里来的鱼的专栏 - CSDN博客
- 常用的ARM汇编指令
- 解决MySQL-Front连接MySQL出现1045错误
- DPI
- Struts 2 开发 RESTful 服务