- using System;
- using System.Text;
- using System.Collections;
- using System.Collections.Specialized;
- namespace AjaxPro
- {
- /// <summary>
- /// Provides methods to serialize and deserialize a NameValueCollection.
- /// </summary>
- public class NameValueCollectionConverter : IJavaScriptConverter
- {
- private string clientType = "Ajax.Web.NameValueCollection";
- public NameValueCollectionConverter() : base()
- {
- }
- public override string GetClientScript()
- {
- return @"addNamespace(""Ajax.Web"");
- Ajax.Web.NameValueCollection = function()
- {
- this.__type = ""System.Collections.Specialized.NameValueCollection"";
- this.add = function(key, value) {
- if(this[key] == null) {
- this[key] = value;
- }
- }
- this.getKeys = function() {
- var keys = [];
- for(key in this)
- if(typeof this[key] != ""function"")
- keys.push(key);
- return keys;
- }
- this.getValue = function(key) {
- return this[key];
- }
- this.toJSON = function() {
- var o = this;
- o.toJSON = null;
- delete o.toJSON;
- return AjaxPro.toJSON(o);
- }
- }
- ";
- }
- public override object Deserialize(IJavaScriptObject o, Type t)
- {
- if(!typeof(NameValueCollection).IsAssignableFrom(t) || !(o is JavaScriptArray))
- throw new NotSupportedException();
- JavaScriptArray a = (JavaScriptArray)o;
- NameValueCollection list = (NameValueCollection)Activator.CreateInstance(t);
- foreach(JavaScriptObject item in a)
- {
- list.Add(item.Keys[0], item[item.Keys[0]].ToString());
- }
- return list;
- }
- public override string Serialize(object o)
- {
- if(!(o is NameValueCollection))
- throw new NotSupportedException();
- StringBuilder sb = new StringBuilder();
- NameValueCollection list = (NameValueCollection)o;
- bool b = true;
- sb.Append("new ");
- sb.Append(clientType);
- sb.Append("([");
- for(int i=0; i<list.Keys.Count; i++)
- {
- if(b){ b = false; }
- else{ sb.Append(","); }
- sb.Append('{');
- sb.Append(JavaScriptSerializer.Serialize(list.Keys[i]));
- sb.Append(':');
- sb.Append(JavaScriptSerializer.Serialize(list[list.Keys[i]]));
- sb.Append('}');
- }
- sb.Append("])");
- return sb.ToString();
- }
- public override Type[] SerializableTypes
- {
- get
- {
- return new Type[]{typeof(NameValueCollection)};
- }
- }
- public override Type[] DeserializableTypes
- {
- get
- {
- return new Type[]{typeof(NameValueCollection)};
- }
- }
- }
- }