JavaScriptConverter Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Stellt eine abstrakte Basisklasse für einen benutzerdefinierten Typkonverter bereit.
public ref class JavaScriptConverter abstract
public abstract class JavaScriptConverter
type JavaScriptConverter = class
Public MustInherit Class JavaScriptConverter
- Vererbung
-
JavaScriptConverter
Beispiele
Das folgende Beispiel zeigt, wie Sie einen benutzerdefinierten Konverter für die ListItemCollection Klasse erstellen.
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
Hinweise
Mit der JavaScriptConverter Klasse können Sie Serialisierungs- und Deserialisierungsprozesse für verwaltete Typen implementieren, die von der JavaScriptSerializer Klasse nicht nativ unterstützt werden. Sie können auch verwenden JavaScriptConverter , wenn Sie mehr Kontrolle über den Serialisierungs- und Deserialisierungsprozess benötigen.
Die SupportedTypes Eigenschaft gibt die Typen an, für die ein benutzerdefinierter Konverter Konverterdienste bereitstellt.
Um anzugeben, dass ein benutzerdefinierter Konverter von der JavaScriptSerializer Instanz verwendet werden muss, müssen Sie den Konverter bei der Instanz registrieren. Wenn Sie die JavaScriptSerializer Klasse direkt verwenden, sollten Sie die RegisterConverters Methode verwenden, um den Konverter zu registrieren. Andernfalls können Sie sie registrieren, wenn Sie Webmethoden aus ECMAScript (JavaScript) aufrufen und den benutzerdefinierten Konverter verwenden möchten, indem Sie ein converters Element in der Konfigurationsdatei hinzufügen. Weitere Informationen finden Sie unter How to: Configure ASP.NET Services in Microsoft Ajax.
Wenn die JavaScriptSerializer Instanz einen Typ serialisiert, für den ein benutzerdefinierter Konverter registriert ist, ruft der Serializer die Serialize Methode auf. Wenn die JavaScriptSerializer Instanz eine JSON-Zeichenfolge (JavaScript Object Notation) deserialisiert und erkennt, dass ein Typ innerhalb der JSON-Zeichenfolge einen benutzerdefinierten Konverter zugeordnet ist, ruft der Serializer die Deserialize Methode auf.
Hinweise für Ausführende
Wenn Sie von JavaScriptConvertererben, müssen Sie die folgenden Member überschreiben:
Deserialize(IDictionary<String,Object>, Type, JavaScriptSerializer)
SupportedTypes JavaScriptSerializer stellt die ConvertToType<T>(Object) Methode bereit, die von Implementierungen JavaScriptConvertervon . Der Konvertercode muss in der Lage sein, einen Wert zu übernehmen, der im Wörterbuch enthalten ist, das vom Serialisierer an ihn übergeben wird, und diesen Wert dann in ein Objekt vom Typ
Tkonvertieren. Anstatt den benutzerdefinierten Konvertierungscode erneut zu implementieren, können Sie die ConvertToType<T>(Object) Methode aufrufen.
Konstruktoren
| Name | Beschreibung |
|---|---|
| JavaScriptConverter() |
Initialisiert eine neue Instanz der JavaScriptConverter-Klasse. |
Eigenschaften
| Name | Beschreibung |
|---|---|
| SupportedTypes |
Beim Überschreiben in einer abgeleiteten Klasse ruft eine Auflistung der unterstützten Typen ab. |
Methoden
| Name | Beschreibung |
|---|---|
| Deserialize(IDictionary<String,Object>, Type, JavaScriptSerializer) |
Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird das bereitgestellte Wörterbuch in ein Objekt des angegebenen Typs konvertiert. |
| Equals(Object) |
Bestimmt, ob das angegebene Objekt dem aktuellen Objekt entspricht. (Geerbt von Object) |
| GetHashCode() |
Dient als Standardhashfunktion. (Geerbt von Object) |
| GetType() |
Ruft die Type der aktuellen Instanz ab. (Geerbt von Object) |
| MemberwiseClone() |
Erstellt eine flache Kopie der aktuellen Object. (Geerbt von Object) |
| Serialize(Object, JavaScriptSerializer) |
Wenn sie in einer abgeleiteten Klasse überschrieben werden, wird ein Wörterbuch mit Namen-Wert-Paaren erstellt. |
| ToString() |
Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Geerbt von Object) |