• 序列化和反序列化,异步调用web/wcf/函数


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



    核心测试代码:

    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.   
    8. public int add(int a, int b)  
    9. {  
    10.     System.Threading.Thread.Sleep(4000);//耗时的操作  
    11.     return a + b;  
    12. }  
    13. public delegate int defun(int a,int b);//定义一个委托  
    14. public void f2()  
    15. {  
    16.     MessageBox.Show(DateTime.Now.ToString());  
    17. }  
    18. private void btnTestseria_Click(object sender, EventArgs e)  
    19. {  
    20.     DataSet ds = new DataSet();  
    21.     DataTable dt = new DataTable();  
    22.     dt.Columns.Add("id",typeof(string));  
    23.     dt.Columns.Add("name"typeof(string));  
    24.     dt.Columns.Add("age"typeof(int));  
    25.     DataRow dr = dt.NewRow();  
    26.     dr["id"] = "1";  
    27.     dr["name"] = "testname1";  
    28.     dr["age"] = 22;  
    29.     dt.Rows.Add(dr);  
    30.     ds.Tables.Add(dt);  
    31.    string s= Common.Common.Seria(ds);//DataSet序列化和反序列化  
    32.    DataSet dsde = Common.Common.DeSeria(s);  
    33.    MessageBox.Show(s+"  "+ds.Tables[0].Rows.Count);  
    34.     List<Student> list=new List<Student>();  
    35.     list.Add(new Student("2","testname2",25));  
    36.     string s2 = Common.Common.Seria<List<Student>>(list);  
    37.     List<Student> listde = Common.Common.DeSeria<List<Student>>(s2);  
    38.     MessageBox.Show(s2+"   "+listde.Count);//List<对象>序列化和反序列化  
    39.   
    40. }  
    41.   
    42. private void btnCall1_Click(object sender, EventArgs e)  
    43. {  
    44.     f2();  
    45. }  
    46.   
    47. private void btnAsynCall2_Click(object sender, EventArgs e)  
    48. {  
    49.     //异步调用  
    50.     defun objDe = new defun(add);  
    51.     IAsyncResult Iasyn = objDe.BeginInvoke(12, 34, nullnull);  
    52.     int re = objDe.EndInvoke(Iasyn);//这里会阻塞线程  
    53.     MessageBox.Show("异步调用返回结果:" + re);  
    54. }  
    55. defun objDe2 = null;  
    56. bool isCalling = false;  
    57. /// <summary>  
    58. /// 自动回调方式调用函数  
    59. /// </summary>  
    60. /// <param name="sender"></param>  
    61. /// <param name="e"></param>  
    62. private void btnAsynCall3_Click(object sender, EventArgs e)  
    63. {  
    64.     if (isCalling == false)  
    65.     {  
    66.         objDe2 = new defun(add);  
    67.         AsyncCallback AsynCallback = new AsyncCallback(AsynCallbackfun);  
    68.         isCalling = true;  
    69.         objDe2.BeginInvoke(23, 45, AsynCallback, null);//完成后自动触发回调函数,不会阻塞线程  
    70.     }  
    71. }  
    72. void AsynCallbackfun(IAsyncResult Iasy)//异步回调函数  
    73. {  
    74.     if (objDe2 != null)  
    75.     {  
    76.         int re = objDe2.EndInvoke(Iasy);//这里会阻塞线程  
    77.         isCalling = false;  
    78.         MessageBox.Show("异步调用返回结果:" + re);  
    79.     }  
    80. }  
    81. void AsynCallbackfun2(IAsyncResult Iasy)//异步回调函数  
    82. {  
    83.     if (objService != null)  
    84.     {  
    85.         string re = objService.EndGetData(Iasy);//这里会阻塞线程  
    86.         isCalling2 = false;  
    87.         MessageBox.Show("Wcf异步调用返回结果:" + re);  
    88.     }  
    89. }  
    90. ServiceReference2.WcfService2Client objService = null;  
    91. bool isCalling2 = false;  
    92. /// <summary>  
    93. /// 自动回调方法调用WCF/Web 服务  
    94. /// </summary>  
    95. /// <param name="sender"></param>  
    96. /// <param name="e"></param>  
    97. private void btnWcfAsynCall1_Click(object sender, EventArgs e)  
    98. {  
    99.     if (isCalling2 == false)  
    100.     {  
    101.         objService = new ServiceReference2.WcfService2Client();  
    102.         AsyncCallback AsynCallback = new AsyncCallback(AsynCallbackfun2);  
    103.         isCalling2 = true;  
    104.         //添加引用时在“高级”中选择“允许生成异步操作”  
    105.         //或者在已有的服务引用上“配置服务引用”  
    106.         objService.BeginGetData  
    107.             (AsynCallback, null);  
    108.     }  
    109. }  
    示例源代码下载:http://download.csdn.net/detail/pukuimin1226/6953713 
  • 相关阅读:
    【Python基础编程222 ● 面向对象 ● 在子类中调用父类中的被子类重写的方法】
    【Python基础编程221 ● 面向对象 ● 子类中重写父类中的方法】
    【Python基础编程220 ● 面向对象 ● 子类不能继承父类中私有的属性和方法】
    【Python基础编程219 ● 面向对象 ● object类】
    【Python基础编程218 ● 面向对象 ● 继承的格式】
    【Python基础编程217 ● 面向对象 ● 关于封装的总结】
    【Python基础编程216 ● 面向对象 ● 定义私有方法和使用】
    【Python基础编程215 ● 面向对象 ● 定义私有属性以及私有属性的访问和修改】
    【Python基础编程214 ● 面向对象 ● 面向对象案例:存放家具】
    【Python基础编程213 ● 面向对象 ● 属性值可以是一个对象】
  • 原文地址:https://www.cnblogs.com/dullbaby/p/5016269.html
Copyright © 2020-2023  润新知