DataSetConverter.cs
上传用户:szgaoree
上传日期:2009-01-05
资源大小:74k
文件大小:2k
源码类别:

Ajax

开发平台:

C#

  1. using System;
  2. using System.Text;
  3. using System.Data;
  4. namespace AjaxPro
  5. {
  6. /// <summary>
  7. /// Provides methods to serialize and deserialize a DataSet object.
  8. /// </summary>
  9. public class DataSetConverter : IJavaScriptConverter
  10. {
  11. private string clientType = "Ajax.Web.DataSet";
  12. public DataSetConverter() : base()
  13. {
  14. }
  15. public override string GetClientScript()
  16. {
  17. return @"addNamespace(""Ajax.Web"");
  18. Ajax.Web.DataSet = function(tables) {
  19. this.__type = ""System.Data.DataSet, System.Data"";
  20. this.Tables = new Array();
  21. this.addTable = function(table) {
  22. this.Tables.push(table);
  23. }
  24. if(tables != null) {
  25. for(var i=0; i<tables.length; i++) {
  26. this.addTable(tables[i]);
  27. }
  28. }
  29. }
  30. ";
  31. }
  32. public override object Deserialize(IJavaScriptObject o, Type t)
  33. {
  34. if(!(o is JavaScriptObject))
  35. throw new NotSupportedException();
  36. JavaScriptObject ht = (JavaScriptObject)o;
  37. if(!ht.Contains("Tables") || !(ht["Tables"] is JavaScriptArray))
  38. throw new NotSupportedException();
  39. JavaScriptArray tables = (JavaScriptArray)ht["Tables"];
  40. DataSet ds = new DataSet();
  41. DataTable dt = null;
  42. foreach(IJavaScriptObject table in tables)
  43. {
  44. dt = (DataTable)JavaScriptDeserializer.Deserialize(table, typeof(DataTable));
  45. if(dt != null)
  46. ds.Tables.Add(dt);
  47. }
  48. return ds;
  49. }
  50. public override string Serialize(object o)
  51. {
  52. if(!(o is DataSet))
  53. throw new NotSupportedException();
  54. StringBuilder sb = new StringBuilder();
  55. DataSet ds = (DataSet)o;
  56. bool b = true;
  57. sb.Append("new ");
  58. sb.Append(clientType);
  59. sb.Append("([");
  60. foreach(DataTable dt in ds.Tables)
  61. {
  62. if(b){ b = false; }
  63. else{ sb.Append(","); }
  64. sb.Append(JavaScriptSerializer.Serialize(dt));
  65. }
  66. sb.Append("])");
  67. return sb.ToString();
  68. }
  69. public override Type[] SerializableTypes
  70. {
  71. get
  72. {
  73. return new Type[]{typeof(DataSet)};
  74. }
  75. }
  76. public override Type[] DeserializableTypes
  77. {
  78. get
  79. {
  80. return new Type[]{typeof(DataSet)};
  81. }
  82. }
  83. }
  84. }