JavaScriptConverter JavaScriptConverter JavaScriptConverter JavaScriptConverter Class

Определение

Предоставляет абстрактный базовый класс для пользовательского преобразователя типов.Provides an abstract base class for a custom type converter.

public ref class JavaScriptConverter abstract
public abstract class JavaScriptConverter
type JavaScriptConverter = class
Public MustInherit Class JavaScriptConverter
Наследование
JavaScriptConverterJavaScriptConverterJavaScriptConverterJavaScriptConverter

Примеры

В следующем примере показано, как создать пользовательский преобразователь для ListItemCollection класса.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;
        }

    }
}
Imports System
Imports System.Collections.Generic
Imports System.Collections.ObjectModel
Imports System.Web.UI.WebControls
Imports System.Collections

Namespace System.Web.Script.Serialization.VB

    Public Class ListItemCollectionConverter
        Inherits JavaScriptConverter

        Public Overrides ReadOnly Property SupportedTypes() As _
            System.Collections.Generic.IEnumerable(Of System.Type)
            Get
                ' Define the ListItemCollection as a supported type.
                Return New ReadOnlyCollection(Of Type)(New List(Of Type) _
                (New Type() {GetType(ListItemCollection)}))
            End Get
        End Property

        Public Overrides Function Serialize(ByVal obj As Object, _
            ByVal serializer As JavaScriptSerializer) As _
            System.Collections.Generic.IDictionary(Of String, Object)

            Dim listType As ListItemCollection = CType(obj, ListItemCollection)

            If Not (listType Is Nothing) Then

                ' Create the representation.
                Dim result As New Dictionary(Of String, Object)

                Dim itemsList As New ArrayList()
                Dim item As ListItem
                For Each item In listType
                    ' Add each entry to the dictionary.
                    Dim listDict As New Dictionary(Of String, Object)
                    listDict.Add("Value", item.Value)
                    listDict.Add("Text", item.Text)
                    itemsList.Add(listDict)
                Next item
                result("List") = itemsList

                Return result
            End If
            Return New Dictionary(Of String, Object)
        End Function

        Public Overrides Function Deserialize(ByVal dictionary As _
            System.Collections.Generic.IDictionary(Of String, Object), _
            ByVal type As System.Type, ByVal serializer As JavaScriptSerializer) As Object

            If dictionary Is Nothing Then
                Throw New ArgumentNullException("dictionary")
            End If

            If type Is GetType(ListItemCollection) Then
                ' Create the instance to deserialize into.
                Dim list As New ListItemCollection()

                ' Deserialize the ListItemCollection's items.
                Dim itemsList As ArrayList = CType(dictionary("List"), ArrayList)
                Dim i As Integer
                For i = 0 To itemsList.Count - 1
                    list.Add(serializer.ConvertToType(Of ListItem)(itemsList(i)))
                Next i

                Return list
            End If

            Return Nothing

        End Function
    End Class
End Namespace

Комментарии

JavaScriptConverter Класс позволяет реализовать сериализации и десериализации процессы для управляемых типов, которые изначально не поддерживаются службой JavaScriptSerializer класса.The JavaScriptConverter class enables you to implement serialization and deserialization processes for managed types that are not natively supported by the JavaScriptSerializer class. Можно также использовать JavaScriptConverter когда требуется более строгий контроль над процессом сериализации и десериализации.You can also use JavaScriptConverter when you need more control over the serialization and deserialization process.

SupportedTypes Свойство указывает, для которых пользовательский преобразователь предоставляет службы преобразователя типов.The SupportedTypes property indicates the types for which a custom converter provides converter services.

Чтобы указать, что пользовательский преобразователь должен целиком использоваться JavaScriptSerializer экземпляра, необходимо зарегистрировать преобразователь в экземпляре.To indicate that a custom converter must be used by the JavaScriptSerializer instance, you must register the converter with the instance. Если вы используете JavaScriptSerializer напрямую, следует использовать RegisterConverters метод, чтобы зарегистрировать преобразователь.If you are using the JavaScriptSerializer class directly, you should use the RegisterConverters method to register the converter. В противном случае если вы вызываете веб-методов из ECMAScript (JavaScript), и вы хотите использовать пользовательский преобразователь, можно зарегистрировать его, добавив converters элемент в файле конфигурации.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. Дополнительные сведения см. в разделе как: Настройка служб ASP.NET в Microsoft Ajax.For more information, see How to: Configure ASP.NET Services in Microsoft Ajax.

Когда JavaScriptSerializer экземпляра сериализации типа для которого имеется пользовательский преобразователь регистрации вызовы сериализатор Serialize метод.When the JavaScriptSerializer instance is serializing a type for which it has a custom converter registered, the serializer calls the Serialize method. Аналогичным образом, когда JavaScriptSerializer экземпляр десериализуемый строку JavaScript Object Notation (JSON) и распознает, что тип внутри строки JSON имеет пользовательский преобразователь, связанные с ней, вызовы сериализатор Deserialize метод.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.

Примечания для тех, кто наследует этот метод

При наследовании от JavaScriptConverter, необходимо переопределить следующие члены:When you inherit from JavaScriptConverter, you must override the following members:

Конструкторы

JavaScriptConverter() JavaScriptConverter() JavaScriptConverter() JavaScriptConverter()

Инициализирует новый экземпляр класса JavaScriptConverter.Initializes a new instance of the JavaScriptConverter class.

Свойства

SupportedTypes SupportedTypes SupportedTypes SupportedTypes

При переопределении в производном классе возвращает набор поддерживаемых типов.When overridden in a derived class, gets a collection of the supported types.

Методы

Deserialize(IDictionary<String,Object>, Type, JavaScriptSerializer) Deserialize(IDictionary<String,Object>, Type, JavaScriptSerializer) Deserialize(IDictionary<String,Object>, Type, JavaScriptSerializer) Deserialize(IDictionary<String,Object>, Type, JavaScriptSerializer)

При переопределении в производном классе преобразовывает предоставленный словарь в объект указанного типа.When overridden in a derived class, converts the provided dictionary into an object of the specified type.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Определяет, равен ли заданный объект текущему объекту.Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Служит хэш-функцией по умолчанию.Serves as the default hash function.

(Inherited from Object)
GetType() GetType() GetType() GetType()

Возвращает объект Type для текущего экземпляра.Gets the Type of the current instance.

(Inherited from Object)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

(Inherited from Object)
Serialize(Object, JavaScriptSerializer) Serialize(Object, JavaScriptSerializer) Serialize(Object, JavaScriptSerializer) Serialize(Object, JavaScriptSerializer)

При переопределении в производном классе составляет словарь из пар имя/значение.When overridden in a derived class, builds a dictionary of name/value pairs.

ToString() ToString() ToString() ToString()

Возвращает строку, представляющую текущий объект.Returns a string that represents the current object.

(Inherited from Object)

Применяется к

Дополнительно