JavaScriptConverter Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Fornece uma classe base abstrata para um conversor de tipo personalizado.
public ref class JavaScriptConverter abstract
public abstract class JavaScriptConverter
type JavaScriptConverter = class
Public MustInherit Class JavaScriptConverter
- Herança
-
JavaScriptConverter
Exemplos
O exemplo a seguir mostra como criar um conversor personalizado para a ListItemCollection classe .
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
Comentários
A JavaScriptConverter classe permite implementar processos de serialização e desserialização para tipos gerenciados que não têm suporte nativo pela JavaScriptSerializer classe . Você também pode usar JavaScriptConverter quando precisar de mais controle sobre o processo de serialização e desserialização.
A SupportedTypes propriedade indica os tipos para os quais um conversor personalizado fornece serviços de conversor.
Para indicar que um conversor personalizado deve ser usado pela JavaScriptSerializer instância , você deve registrar o conversor com a instância . Se você estiver usando a JavaScriptSerializer classe diretamente, deverá usar o RegisterConverters método para registrar o conversor. Caso contrário, se você estiver invocando métodos Web do ECMAScript (JavaScript) e quiser usar o conversor personalizado, poderá registrá-lo adicionando um converters
elemento no arquivo de configuração. Para obter mais informações, consulte Como configurar ASP.NET Services no Microsoft Ajax.
Quando a JavaScriptSerializer instância está serializando um tipo para o qual tem um conversor personalizado registrado, o serializador chama o Serialize método . Da mesma forma, quando a JavaScriptSerializer instância está desserializando uma cadeia de caracteres JSON (JavaScript Object Notation) e reconhece que um tipo dentro da cadeia de caracteres JSON tem um conversor personalizado associado a ela, o serializador chama o Deserialize método .
Notas aos Implementadores
Ao herdar de JavaScriptConverter, você deve substituir os seguintes membros:
Deserialize(IDictionary<String,Object>, Type, JavaScriptSerializer)
SupportedTypes JavaScriptSerializer fornece o ConvertToType<T>(Object) método que será usado pelos implementadores de JavaScriptConverter. O código do conversor deve ser capaz de obter um valor contido no dicionário que o serializador passa para ele e, em seguida, converter esse valor em um objeto do tipo
T
. Em vez de implementar novamente o código de conversão personalizado para fazer isso, você pode chamar o ConvertToType<T>(Object) método .
Construtores
JavaScriptConverter() |
Inicializa uma nova instância da classe JavaScriptConverter. |
Propriedades
SupportedTypes |
Quando substituída em uma classe derivada, obtém uma coleção de tipos compatíveis. |
Métodos
Deserialize(IDictionary<String,Object>, Type, JavaScriptSerializer) |
Quando substituído em uma classe derivada, converte o dicionário fornecido em um objeto do tipo especificado. |
Equals(Object) |
Determina se o objeto especificado é igual ao objeto atual. (Herdado de Object) |
GetHashCode() |
Serve como a função de hash padrão. (Herdado de Object) |
GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
MemberwiseClone() |
Cria uma cópia superficial do Object atual. (Herdado de Object) |
Serialize(Object, JavaScriptSerializer) |
Quando substituído em uma classe derivada, cria um dicionário de pares nome/valor. |
ToString() |
Retorna uma cadeia de caracteres que representa o objeto atual. (Herdado de Object) |