JavaScriptConverter Classe

Definição

Fornece uma classe base abstrata para um conversor de tipos personalizado.

public ref class JavaScriptConverter abstract
public abstract class JavaScriptConverter
type JavaScriptConverter = class
Public MustInherit Class JavaScriptConverter
Herança
JavaScriptConverter

Exemplos

O exemplo seguinte mostra como criar um conversor personalizado para a ListItemCollection turma.

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.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

Observações

A JavaScriptConverter classe permite-lhe implementar processos de serialização e desserialização para tipos geridos que não são suportados nativamente pela JavaScriptSerializer classe. Também pode usar JavaScriptConverter quando precisar de mais controlo sobre o processo de serialização e desserialização.

A SupportedTypes propriedade indica os tipos para os quais um conversor personalizado presta serviços de conversor.

Para indicar que a instância deve usar JavaScriptSerializer um conversor personalizado, deve registar o conversor na instância. Se estiveres a usar a JavaScriptSerializer classe diretamente, deves usar o RegisterConverters método para registar o conversor. Caso contrário, se estiver a invocar métodos Web do ECMAScript (JavaScript) e quiser usar o conversor personalizado, pode registá-lo adicionando um converters elemento no ficheiro de configuração. Para mais informações, consulte Como: Configurar Serviços de ASP.NET em Microsoft Ajax.

Quando a JavaScriptSerializer instância está a serializar um tipo para o qual tem um conversor personalizado registado, o serializador chama o Serialize método. De forma semelhante, quando a JavaScriptSerializer instância está a desserializar uma string de JavaScript Object Notation (JSON) e reconhece que um tipo dentro da string JSON tem um conversor personalizado associado, o serializador chama o Deserialize método.

Notas para Implementadores

Quando herdar de JavaScriptConverter, deve sobrepor-se aos seguintes membros:

Construtores

Name Description
JavaScriptConverter()

Inicializa uma nova instância da JavaScriptConverter classe.

Propriedades

Name Description
SupportedTypes

Quando é sobreposto numa classe derivada, obtém uma coleção dos tipos suportados.

Métodos

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

Quando sobrescrito numa classe derivada, converte o dicionário fornecido num objeto do tipo especificado.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetHashCode()

Serve como função de hash predefinida.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
Serialize(Object, JavaScriptSerializer)

Quando sobreposto numa classe derivada, constrói um dicionário de pares nome/valor.

ToString()

Devolve uma cadeia que representa o objeto atual.

(Herdado de Object)

Aplica-se a

Ver também