1. //xml序列化
  2. public static string Seria(DataSet ds)
  3. {
  4. XmlSerializer serializer = new XmlSerializer(typeof(DataSet));
  5. StringBuilder sb = new StringBuilder();
  6. XmlWriter writer = XmlWriter.Create(sb);
  7. serializer.Serialize(writer, ds);
  8. return sb.ToString();
  9. }
  10. //xml反序列化
  11. public static DataSet DeSeria(string sb)
  12. {
  13. XmlSerializer serializer = new XmlSerializer(typeof(DataSet));
  14. StringReader sr = new StringReader(sb);
  15. XmlReader xr = XmlReader.Create(sr);
  16. DataSet ds = (DataSet)serializer.Deserialize(xr);
  17. return ds;
  18. }
  19. public static string Seria<T>(T ds)
  20. {
  21. XmlSerializer serializer = new XmlSerializer(typeof(T));
  22. StringBuilder sb = new StringBuilder();
  23. XmlWriter writer = XmlWriter.Create(sb);
  24. serializer.Serialize(writer, ds);
  25. return sb.ToString();
  26. }
  27. //xml反序列化
  28. public static T DeSeria<T>(string sb)
  29. {
  30. XmlSerializer serializer = new XmlSerializer(typeof(T));
  31. StringReader sr = new StringReader(sb);
  32. XmlReader xr = XmlReader.Create(sr);
  33. T ds = (T)serializer.Deserialize(xr);
  34. return ds;
  35. }

核心测试代码:

  1. private void butCallWebservice1_Click(object sender, EventArgs e)
  2. {
  3. ServiceReference1.WebService1SoapClient wc = new ServiceReference1.WebService1SoapClient();
  4. string ret = wc.HelloWorld();
  5. MessageBox.Show("web服务返回值:"+ret);
  6. }
  7. public int add(int a, int b)
  8. {
  9. System.Threading.Thread.Sleep(4000);//耗时的操作
  10. return a + b;
  11. }
  12. public delegate int defun(int a,int b);//定义一个委托
  13. public void f2()
  14. {
  15. MessageBox.Show(DateTime.Now.ToString());
  16. }
  17. private void btnTestseria_Click(object sender, EventArgs e)
  18. {
  19. DataSet ds = new DataSet();
  20. DataTable dt = new DataTable();
  21. dt.Columns.Add("id",typeof(string));
  22. dt.Columns.Add("name", typeof(string));
  23. dt.Columns.Add("age", typeof(int));
  24. DataRow dr = dt.NewRow();
  25. dr["id"] = "1";
  26. dr["name"] = "testname1";
  27. dr["age"] = 22;
  28. dt.Rows.Add(dr);
  29. ds.Tables.Add(dt);
  30. string s= Common.Common.Seria(ds);//DataSet序列化和反序列化
  31. DataSet dsde = Common.Common.DeSeria(s);
  32. MessageBox.Show(s+"\n "+ds.Tables[0].Rows.Count);
  33. List<Student> list=new List<Student>();
  34. list.Add(new Student("2","testname2",25));
  35. string s2 = Common.Common.Seria<List<Student>>(list);
  36. List<Student> listde = Common.Common.DeSeria<List<Student>>(s2);
  37. MessageBox.Show(s2+" \n "+listde.Count);//List<对象>序列化和反序列化
  38. }
  39. private void btnCall1_Click(object sender, EventArgs e)
  40. {
  41. f2();
  42. }
  43. private void btnAsynCall2_Click(object sender, EventArgs e)
  44. {
  45. //异步调用
  46. defun objDe = new defun(add);
  47. IAsyncResult Iasyn = objDe.BeginInvoke(12, 34, null, null);
  48. int re = objDe.EndInvoke(Iasyn);//这里会阻塞线程
  49. MessageBox.Show("异步调用返回结果:" + re);
  50. }
  51. defun objDe2 = null;
  52. bool isCalling = false;
  53. /// <summary>
  54. /// 自动回调方式调用函数
  55. /// </summary>
  56. /// <param name="sender"></param>
  57. /// <param name="e"></param>
  58. private void btnAsynCall3_Click(object sender, EventArgs e)
  59. {
  60. if (isCalling == false)
  61. {
  62. objDe2 = new defun(add);
  63. AsyncCallback AsynCallback = new AsyncCallback(AsynCallbackfun);
  64. isCalling = true;
  65. objDe2.BeginInvoke(23, 45, AsynCallback, null);//完成后自动触发回调函数,不会阻塞线程
  66. }
  67. }
  68. void AsynCallbackfun(IAsyncResult Iasy)//异步回调函数
  69. {
  70. if (objDe2 != null)
  71. {
  72. int re = objDe2.EndInvoke(Iasy);//这里会阻塞线程
  73. isCalling = false;
  74. MessageBox.Show("异步调用返回结果:" + re);
  75. }
  76. }
  77. void AsynCallbackfun2(IAsyncResult Iasy)//异步回调函数
  78. {
  79. if (objService != null)
  80. {
  81. string re = objService.EndGetData(Iasy);//这里会阻塞线程
  82. isCalling2 = false;
  83. MessageBox.Show("Wcf异步调用返回结果:" + re);
  84. }
  85. }
  86. ServiceReference2.WcfService2Client objService = null;
  87. bool isCalling2 = false;
  88. /// <summary>
  89. /// 自动回调方法调用WCF/Web 服务
  90. /// </summary>
  91. /// <param name="sender"></param>
  92. /// <param name="e"></param>
  93. private void btnWcfAsynCall1_Click(object sender, EventArgs e)
  94. {
  95. if (isCalling2 == false)
  96. {
  97. objService = new ServiceReference2.WcfService2Client();
  98. AsyncCallback AsynCallback = new AsyncCallback(AsynCallbackfun2);
  99. isCalling2 = true;
  100. //添加引用时在“高级”中选择“允许生成异步操作”
  101. //或者在已有的服务引用上“配置服务引用”
  102. objService.BeginGetData
  103. (AsynCallback, null);
  104. }
  105. }
示例源代码下载:http://download.csdn.net/detail/pukuimin1226/6953713 

序列化和反序列化,异步调用web/wcf/函数的更多相关文章

  1. mvc路由引起异步调用web服务的问题

    从一篇blog得知使用脚本可以异步调用Web服务,觉得很新鲜,因为自己很少用到Web服务,所以决定写一写看看什么效果. 首先在UI项目(我使用的是MVC4.0)里创建一个Web服务. 添加Web服务后 ...

  2. 通过.NET客户端异步调用Web API(C#)

    在学习Web API的基础课程 Calling a Web API From a .NET Client (C#) 中,作者介绍了如何客户端调用WEB API,并给了示例代码. 但是,那些代码并不是非 ...

  3. 25.C# 异步调用Web服务

    1.创建Web服务 1.1VS新建ASP.Net空Web应用程序 1.2添加Web服务新建项 1.3添加GetWeather方法和相关类 using System; using System.Coll ...

  4. HttpClient异步调用WEB服务

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net ...

  5. Jackson序列化和反序列化Json数据完整示例

    Jackson序列化和反序列化Json数据 Web技术发展的今天,Json和XML已经成为了web数据的事实标准,然而这种格式化的数据手工解析又非常麻烦,软件工程界永远不缺少工具,每当有需求的时候就会 ...

  6. 使用HttpClient 调用Web Api

    C#4.5 添加了异步调用Web Api . 如果你的项目是4.5以上版本,可以直接参考官方文档. http://www.asp.net/web-api/overview/web-api-client ...

  7. C# 同步调用 异步调用 异步回调 多线程的作用

    同步调用   : 委托的Invoke方法用来进行同步调用.同步调用也可以叫阻塞调用,它将阻塞当前线程,然后执行调用,调用完毕后再继续向下进行. 异步调用  :同步调用会阻塞线程,如果是要调用一项繁重的 ...

  8. ObjectOutputStream和ObjectInputStream对对象进行序列化和反序列化

    1 Java序列化和反序列化简介 Java序列化是指把对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为java对象的过程. 我们把对象序列化成有序字节流,保存到本地磁盘或者Redis等 ...

  9. Silverlight中异步调用WCF服务,传入回调函数

    以前学的ASP.NET,调用的都是同步方法,同步方法的好处就是,一步一步走,完成这步才会走下一步.然而,WCF使用的都是异步方法,调用之后不管有没有获得结果就直接往下走,最可恶的是异步函数都是Void ...

随机推荐

  1. redis使用日志(二) 数据存储到redis

    一段简短的代码,来展示如何把爬取内容写到redis里面: #! /usr/bin/env python # -*- coding=utf-8 -*- import requests import js ...

  2. UCOS-消息邮箱(学习笔记)

    任务间数据传递通过缓冲区进行,如果将缓冲区赋值给时间控制块成员:指针OSEventPtr,且任务控制块类型为OS_EVENT_TYPE_MBOS则即为消息邮箱: 一创建消息邮箱:OS_EVENT *O ...

  3. 火狐firefox提示“内容编码错误 无法显示您尝试查看的页面,因为它使用了无效或者不支持的压缩格式。”

    火狐firefox浏览器打开网也是时提示“内容编码错误 无法显示您尝试查看的页面,因为它使用了无效或者不支持的压缩格式.” 今早一来打开用PHPCMS做的网站时就提示这个错误,用其他浏览器打开提示的是 ...

  4. Win7家庭版开启Administrator管理员帐户的方法

    Win7家庭版开启Administrator管理员帐户的方法 发布时间:2014-11-17 18:30:06来源:系统盒浏览数:2786 很多用户安装好Win7系统第一步就是开启Administra ...

  5. Good Sentences

    Wine in, truth out One is never too old to learn What is done can not be undone Time tries all thing ...

  6. rbenv安装ruby2.3.0在线安装不上。老子出绝招了(更新)

    今天把系统换成Linux mint了.感觉比ubuntu的好用太多,细节真是不错,Ubuntu感觉就是毛坯房,Linux mint真是精装修啊 问题来了.安装rbenv后,然后安装rbenv-buil ...

  7. c# WMI获取机器硬件信息(硬盘,cpu,内存等)

    using System; using System.Collections.Generic; using System.Globalization; using System.Management; ...

  8. nyoj 85 有趣的数

    点击打开链接 有趣的数 时间限制:3000 ms  |  内存限制:65535 KB 难度: 描述 把分数按下面的办法排成一个数表. 1/1 1/2 1/3 1/4..... 2/1 2/2 2/3. ...

  9. [HackerCup Round1 3] Winning at Sports (动态规划)

    题目链接:https://www.facebook.com/hackercup/problems.php?pid=688426044611322&round=344496159068801 题 ...

  10. 模拟一下goldengate中断后,重新同步操作

    模拟一下goldengata中断后,重新同步操作:     1.关掉源端抽取进程 GGSCI (20081122-2105) 15> info all Program     Status    ...