JavaScriptConverter Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
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:
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 conversor deve ser capaz de tomar um valor contido no dicionário que o serializador lhe passa, e depois converter esse valor num objeto do tipo
T. Em vez de reimplementar o código de conversão personalizado para isso, pode chamar o ConvertToType<T>(Object) método.
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) |