ilistconverter.cs
来自「AJAX开发工具包」· CS 代码 · 共 81 行
CS
81 行
using System;
using System.Reflection;
using System.Text;
using System.Collections;
using System.Collections.Specialized;
namespace AjaxPro
{
/// <summary>
/// Provides methods to serialize and deserialize an object that implements IList.
/// </summary>
/// <remarks>
/// The .Add methods argument type is used to get the type for the list.
/// </remarks>
public class IListConverter : IJavaScriptConverter
{
public IListConverter() : base()
{
}
public override object Deserialize(IJavaScriptObject o, Type t)
{
if(!typeof(IList).IsAssignableFrom(t) || !(o is JavaScriptArray))
throw new NotSupportedException();
JavaScriptArray a = (JavaScriptArray)o;
IList list = (IList)Activator.CreateInstance(t);
MethodInfo mi = t.GetMethod("Add");
ParameterInfo pi = mi.GetParameters()[0];
foreach(IJavaScriptObject i in a)
{
list.Add(JavaScriptDeserializer.Deserialize(i, pi.ParameterType));
}
return list;
}
public override string Serialize(object o)
{
if(!(o is IList))
throw new NotSupportedException();
StringBuilder sb = new StringBuilder();
IEnumerable enumerable = (IEnumerable)o;
bool b = true;
sb.Append("[");
foreach(object obj in enumerable)
{
if(b){ b = false; }
else{ sb.Append(","); }
sb.Append(JavaScriptSerializer.Serialize(obj));
}
sb.Append("]");
return sb.ToString();
}
public override Type[] SerializableTypes
{
get
{
return new Type[]{typeof(IList)};
}
}
public override Type[] DeserializableTypes
{
get
{
return new Type[]{typeof(IList)};
}
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?