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

Ajax

开发平台:

C#

  1. using System;
  2. using System.Text;
  3. using System.Collections;
  4. using System.Collections.Specialized;
  5. namespace AjaxPro
  6. {
  7. /// <summary>
  8. /// Provides methods to serialize and deserialize a NameValueCollection.
  9. /// </summary>
  10. public class NameValueCollectionConverter : IJavaScriptConverter
  11. {
  12. private string clientType = "Ajax.Web.NameValueCollection";
  13. public NameValueCollectionConverter() : base()
  14. {
  15. }
  16. public override string GetClientScript()
  17. {
  18. return @"addNamespace(""Ajax.Web"");
  19. Ajax.Web.NameValueCollection = function()
  20. {
  21. this.__type = ""System.Collections.Specialized.NameValueCollection"";
  22. this.add = function(key, value) {
  23. if(this[key] == null) {
  24. this[key] = value;
  25. }
  26. }
  27. this.getKeys = function() {
  28. var keys = [];
  29. for(key in this)
  30. if(typeof this[key] != ""function"")
  31. keys.push(key);
  32. return keys;
  33. }
  34. this.getValue = function(key) {
  35. return this[key];
  36. }
  37. this.toJSON = function() {
  38. var o = this;
  39. o.toJSON = null;
  40. delete o.toJSON;
  41. return AjaxPro.toJSON(o);
  42. }
  43. }
  44. ";
  45. }
  46. public override object Deserialize(IJavaScriptObject o, Type t)
  47. {
  48. if(!typeof(NameValueCollection).IsAssignableFrom(t) || !(o is JavaScriptArray))
  49. throw new NotSupportedException();
  50. JavaScriptArray a = (JavaScriptArray)o;
  51. NameValueCollection list = (NameValueCollection)Activator.CreateInstance(t);
  52. foreach(JavaScriptObject item in a)
  53. {
  54. list.Add(item.Keys[0], item[item.Keys[0]].ToString());
  55. }
  56. return list;
  57. }
  58. public override string Serialize(object o)
  59. {
  60. if(!(o is NameValueCollection))
  61. throw new NotSupportedException();
  62. StringBuilder sb = new StringBuilder();
  63. NameValueCollection list = (NameValueCollection)o;
  64. bool b = true;
  65. sb.Append("new ");
  66. sb.Append(clientType);
  67. sb.Append("([");
  68. for(int i=0; i<list.Keys.Count; i++)
  69. {
  70. if(b){ b = false; }
  71. else{ sb.Append(","); }
  72. sb.Append('{');
  73. sb.Append(JavaScriptSerializer.Serialize(list.Keys[i]));
  74. sb.Append(':');
  75. sb.Append(JavaScriptSerializer.Serialize(list[list.Keys[i]]));
  76. sb.Append('}');
  77. }
  78. sb.Append("])");
  79. return sb.ToString();
  80. }
  81. public override Type[] SerializableTypes
  82. {
  83. get
  84. {
  85. return new Type[]{typeof(NameValueCollection)};
  86. }
  87. }
  88. public override Type[] DeserializableTypes
  89. {
  90. get
  91. {
  92. return new Type[]{typeof(NameValueCollection)};
  93. }
  94. }
  95. }
  96. }