Export (0) Print
Expand All

JavaScriptConverter Class

Provides an abstract base class for a custom type converter.

System.Object
  System.Web.Script.Serialization.JavaScriptConverter

Namespace:  System.Web.Script.Serialization
Assembly:  System.Web.Extensions (in System.Web.Extensions.dll)

public abstract class JavaScriptConverter

The JavaScriptConverter type exposes the following members.

  NameDescription
Protected methodJavaScriptConverterInitializes a new instance of the JavaScriptConverter class.
Top

  NameDescription
Public propertySupportedTypesWhen overridden in a derived class, gets a collection of the supported types.
Top

  NameDescription
Public methodDeserializeWhen overridden in a derived class, converts the provided dictionary into an object of the specified type.
Public methodEquals(Object)Determines whether the specified object is equal to the current object. (Inherited from Object.)
Protected methodFinalizeAllows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. (Inherited from Object.)
Public methodGetHashCodeServes as the default hash function. (Inherited from Object.)
Public methodGetTypeGets the Type of the current instance. (Inherited from Object.)
Protected methodMemberwiseCloneCreates a shallow copy of the current Object. (Inherited from Object.)
Public methodSerializeWhen overridden in a derived class, builds a dictionary of name/value pairs.
Public methodToStringReturns a string that represents the current object. (Inherited from Object.)
Top

The JavaScriptConverter class enables you to implement serialization and deserialization processes for managed types that are not natively supported by the JavaScriptSerializer class. You can also use JavaScriptConverter when you need more control over the serialization and deserialization process.

The SupportedTypes property indicates the types for which a custom converter provides converter services.

To indicate that a custom converter must be used by the JavaScriptSerializer instance, you must register the converter with the instance. If you are using the JavaScriptSerializer class directly, you should use the RegisterConverters method to register the converter. Otherwise, if you are invoking Web methods from ECMAScript (JavaScript) and you want to use the custom converter, you can register it by adding a converters element in the configuration file. For more information, see How to: Configure ASP.NET Services in Microsoft Ajax.

When the JavaScriptSerializer instance is serializing a type for which it has a custom converter registered, the serializer calls the Serialize method. Similarly, when the JavaScriptSerializer instance is deserializing a JavaScript Object Notation (JSON) string and recognizes that a type inside the JSON string has a custom converter associated with it, the serializer calls the Deserialize method.

Notes to Inheritors

When you inherit from JavaScriptConverter, you must override the following members:

JavaScriptSerializer provides the ConvertToType method that will be used by implementers of JavaScriptConverter. Converter code must be able to take a value that is contained in the dictionary that the serializer passes to it, and then convert that value into an object of type T. Rather than re-implementing the custom conversion code to accomplish this, you can call the ConvertToType method.

The following example shows how to create a custom converter for the ListItemCollection class.

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Web.UI.WebControls;
using System.Collections;

namespace System.Web.Script.Serialization.CS
{
    public class ListItemCollectionConverter : JavaScriptConverter
    {

        public override IEnumerable<Type> SupportedTypes
        {
            //Define the ListItemCollection as a supported type. 
            get { return new ReadOnlyCollection<Type>(new List<Type>(new Type[] { typeof(ListItemCollection) })); }
        }

        public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
        {
            ListItemCollection listType = obj as ListItemCollection;

            if (listType != null)
            {
                // Create the representation.
                Dictionary<string, object> result = new Dictionary<string, object>();
                ArrayList itemsList = new ArrayList();
                foreach (ListItem item in listType)
                {
                    //Add each entry to the dictionary.
                    Dictionary<string, object> listDict = new Dictionary<string, object>();
                    listDict.Add("Value", item.Value);
                    listDict.Add("Text", item.Text);
                    itemsList.Add(listDict);
                }
                result["List"] = itemsList;

                return result;
            }
            return new Dictionary<string, object>();
        }

        public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)
        {
            if (dictionary == null)
                throw new ArgumentNullException("dictionary");

            if (type == typeof(ListItemCollection))
            {
                // Create the instance to deserialize into.
                ListItemCollection list = new ListItemCollection();

                // Deserialize the ListItemCollection's items.
                ArrayList itemsList = (ArrayList)dictionary["List"];
                for (int i=0; i<itemsList.Count; i++)
                    list.Add(serializer.ConvertToType<ListItem>(itemsList[i]));

                return list;
            }
            return null;
        }

    }
}

.NET Framework

Supported in: 4.6, 4, 3.5

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
Show:
© 2014 Microsoft