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

Ajax

开发平台:

C#

  1. using System;
  2. using System.Reflection;
  3. using System.Text;
  4. using System.Collections;
  5. using System.Collections.Specialized;
  6. namespace AjaxPro
  7. {
  8. /// <summary>
  9. /// Provides methods to serialize and deserialize an object that implements IList.
  10. /// </summary>
  11. /// <remarks>
  12. /// The .Add methods argument type is used to get the type for the list.
  13. /// </remarks>
  14. public class IListConverter : IJavaScriptConverter
  15. {
  16. public IListConverter() : base()
  17. {
  18. }
  19. public override object Deserialize(IJavaScriptObject o, Type t)
  20. {
  21. if(!typeof(IList).IsAssignableFrom(t) || !(o is JavaScriptArray))
  22. throw new NotSupportedException();
  23. JavaScriptArray a = (JavaScriptArray)o;
  24. IList list = (IList)Activator.CreateInstance(t);
  25. MethodInfo mi = t.GetMethod("Add");
  26. ParameterInfo pi = mi.GetParameters()[0];
  27. foreach(IJavaScriptObject i in a)
  28. {
  29. list.Add(JavaScriptDeserializer.Deserialize(i, pi.ParameterType));
  30. }
  31. return list;
  32. }
  33. public override string Serialize(object o)
  34. {
  35. if(!(o is IList))
  36. throw new NotSupportedException();
  37. StringBuilder sb = new StringBuilder();
  38. IEnumerable enumerable = (IEnumerable)o;
  39. bool b = true;
  40. sb.Append("[");
  41. foreach(object obj in enumerable)
  42. {
  43. if(b){ b = false; }
  44. else{ sb.Append(","); }
  45. sb.Append(JavaScriptSerializer.Serialize(obj));
  46. }
  47. sb.Append("]");
  48. return sb.ToString();
  49. }
  50. public override Type[] SerializableTypes
  51. {
  52. get
  53. {
  54. return new Type[]{typeof(IList)};
  55. }
  56. }
  57. public override Type[] DeserializableTypes
  58. {
  59. get
  60. {
  61. return new Type[]{typeof(IList)};
  62. }
  63. }
  64. }
  65. }