idictionaryconverter.cs
来自「AJAX开发工具包」· CS 代码 · 共 107 行
CS
107 行
/*
* MS 05-12-21 added Deserialize for Hashtables
* JavaScript object will now include the type for key and value
*
*
*
*/
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 IDictionary.
/// </summary>
public class IDictionaryConverter : IJavaScriptConverter
{
public IDictionaryConverter() : base()
{
}
public override object Deserialize(IJavaScriptObject o, Type t)
{
if (!(o is JavaScriptArray))
throw new NotSupportedException();
JavaScriptArray a = (JavaScriptArray)o;
for (int i = 0; i < a.Count; i++)
if (!(a[i] is JavaScriptArray))
throw new NotSupportedException();
IDictionary d = (IDictionary)Activator.CreateInstance(t);
object key;
object value;
JavaScriptArray aa;
for (int i = 0; i < a.Count; i++)
{
aa = (JavaScriptArray)a[i];
key = JavaScriptDeserializer.Deserialize((IJavaScriptObject)aa[0], Type.GetType(((JavaScriptString)aa[2]).ToString()));
value = JavaScriptDeserializer.Deserialize((IJavaScriptObject)aa[1], Type.GetType(((JavaScriptString)aa[3]).ToString()));
d.Add(key, value);
}
return d;
}
public override string Serialize(object o)
{
if(!(o is IDictionary))
throw new NotSupportedException();
StringBuilder sb = new StringBuilder();
IDictionary dic = (IDictionary)o;
IDictionaryEnumerator enumerable = dic.GetEnumerator();
enumerable.Reset();
bool b = true;
sb.Append("[");
while(enumerable.MoveNext())
{
if(b){ b = false; }
else{ sb.Append(","); }
sb.Append('[');
sb.Append(JavaScriptSerializer.Serialize(enumerable.Key));
sb.Append(',');
sb.Append(JavaScriptSerializer.Serialize(enumerable.Value));
sb.Append(',');
sb.Append(JavaScriptSerializer.SerializeString(enumerable.Key.GetType().FullName));
sb.Append(',');
sb.Append(JavaScriptSerializer.SerializeString(enumerable.Value.GetType().FullName));
sb.Append(']');
}
sb.Append("]");
return sb.ToString();
}
public override Type[] DeserializableTypes
{
get
{
return new Type[] { typeof(Hashtable) };
}
}
public override Type[] SerializableTypes
{
get
{
return new Type[]{typeof(IDictionary), typeof(Hashtable)};
}
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?