JavaScriptConverter Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Proporciona una clase base abstracta para un convertidor de tipos personalizado.
public ref class JavaScriptConverter abstract
public abstract class JavaScriptConverter
type JavaScriptConverter = class
Public MustInherit Class JavaScriptConverter
- Herencia
-
JavaScriptConverter
Ejemplos
En el ejemplo siguiente se muestra cómo crear un convertidor personalizado para la ListItemCollection clase .
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
Comentarios
La JavaScriptConverter clase permite implementar procesos de serialización y deserialización para tipos administrados que no son compatibles de forma nativa con la JavaScriptSerializer clase . También puede usar JavaScriptConverter cuando necesite más control sobre el proceso de serialización y deserialización.
La SupportedTypes propiedad indica los tipos para los que un convertidor personalizado proporciona servicios de convertidor.
Para indicar que la JavaScriptSerializer instancia debe usar un convertidor personalizado, debe registrar el convertidor con la instancia de . Si usa la JavaScriptSerializer clase directamente, debe usar el RegisterConverters método para registrar el convertidor. De lo contrario, si está invocando métodos web de ECMAScript (JavaScript) y desea usar el convertidor personalizado, puede registrarlo agregando un converters
elemento en el archivo de configuración. Para obtener más información, vea How to: Configure ASP.NET Services in Microsoft Ajax.
Cuando la JavaScriptSerializer instancia de está serializando un tipo para el que tiene registrado un convertidor personalizado, el serializador llama al Serialize método . De forma similar, cuando la JavaScriptSerializer instancia de está deserializando una cadena de notación de objetos JavaScript (JSON) y reconoce que un tipo dentro de la cadena JSON tiene un convertidor personalizado asociado, el serializador llama al Deserialize método .
Notas a los implementadores
Al heredar de JavaScriptConverter, es necesario invalidar los miembros siguientes:.
Deserialize(IDictionary<String,Object>, Type, JavaScriptSerializer)
SupportedTypes JavaScriptSerializer proporciona el ConvertToType<T>(Object) método que usarán los implementadores de JavaScriptConverter. El código del convertidor debe ser capaz de tomar un valor contenido en el diccionario que el serializador pasa a él y, a continuación, convertir ese valor en un objeto de tipo
T
. En lugar de volver a implementar el código de conversión personalizado para hacerlo, puede llamar al ConvertToType<T>(Object) método .
Constructores
JavaScriptConverter() |
Inicializa una nueva instancia de la clase JavaScriptConverter. |
Propiedades
SupportedTypes |
Cuando se invalida en una clase derivada, obtiene una colección de los tipos admitidos. |
Métodos
Deserialize(IDictionary<String,Object>, Type, JavaScriptSerializer) |
Cuando se invalida en una clase derivada, convierte el diccionario proporcionado en un objeto del tipo especificado. |
Equals(Object) |
Determina si el objeto especificado es igual que el objeto actual. (Heredado de Object) |
GetHashCode() |
Sirve como la función hash predeterminada. (Heredado de Object) |
GetType() |
Obtiene el Type de la instancia actual. (Heredado de Object) |
MemberwiseClone() |
Crea una copia superficial del Object actual. (Heredado de Object) |
Serialize(Object, JavaScriptSerializer) |
Cuando se invalida en una clase derivada, crea un diccionario de pares de nombre/valor. |
ToString() |
Devuelve una cadena que representa el objeto actual. (Heredado de Object) |