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

Ajax

开发平台:

C#

  1. using System;
  2. using System.Web;
  3. using System.Reflection;
  4. using System.IO;
  5. namespace AjaxPro
  6. {
  7. internal class IFrameProcessor : IAjaxProcessor
  8. {
  9. private int hashCode;
  10. internal IFrameProcessor(HttpContext context, Type type) : base(context, type)
  11. {
  12. }
  13. #region IAjaxProcessor Members
  14. public override object[] RetreiveParameters()
  15. {
  16. ParameterInfo[] pi = method.GetParameters();
  17. if(pi.Length == 0)
  18. return null;
  19. object[] args = new object[pi.Length];
  20. // initialize default values
  21. for(int i=0; i<pi.Length; i++)
  22. args[i] = pi[i].DefaultValue;
  23. string v = context.Request["data"];
  24. if(v == null) // something went wrong, we cannot fill the arguments
  25. return args;
  26. hashCode = v.GetHashCode();
  27. // check if we have to decrypt the JSON string.
  28. if(Utility.Settings != null && Utility.Settings.Encryption != null)
  29. v = Utility.Settings.Encryption.CryptProvider.Decrypt(v);
  30. JavaScriptObject jso = (JavaScriptObject)JavaScriptDeserializer.Deserialize(v, typeof(JavaScriptObject));
  31. for(int i=0; i<pi.Length; i++)
  32. {
  33. if(jso.Contains(pi[i].Name))
  34. args[i] = JavaScriptDeserializer.Deserialize((IJavaScriptObject)jso[pi[i].Name], pi[i].ParameterType);
  35. }
  36. return args;
  37. }
  38. public override string SerializeObject(object o)
  39. {
  40. // On the client we want to have a real object.
  41. // For more details visit: http://www.crockford.com/JSON/index.html
  42. // 
  43. // JSON is built on two structures:
  44. //   - A collection of name/value pairs. In various languages, 
  45. //     this is realized as an object, record, struct, dictionary, 
  46. //     hash table, keyed list, or associative array. 
  47. //   - An ordered list of values. In most languages, this is realized 
  48. //     as an array. 
  49. string res = JavaScriptSerializer.Serialize(o);
  50. System.Text.StringBuilder sb = new System.Text.StringBuilder();
  51. sb.Append("<html><body><script language="javascript">document.body.res = ");
  52. sb.Append(JavaScriptSerializer.SerializeString(res));
  53. sb.Append("</script></body></html>");
  54. context.Response.ContentType = "text/html";
  55. context.Response.Write(sb.ToString());
  56. return sb.ToString();
  57. }
  58. public override MethodInfo Method
  59. {
  60. get
  61. {
  62. if(context.Request["Ajax-method"] != null)
  63. method = type.GetMethod(context.Request["Ajax-method"]);
  64. return method;
  65. }
  66. }
  67. public override bool IsEncryptionAble
  68. {
  69. get
  70. {
  71. return true;
  72. }
  73. }
  74. public override int GetHashCode()
  75. {
  76. return hashCode;
  77. }
  78. #endregion
  79. }
  80. }