JavaScriptConverter Klas

Definitie

Biedt een abstracte basisklasse voor een conversieprogramma voor aangepaste typen.

public ref class JavaScriptConverter abstract
public abstract class JavaScriptConverter
type JavaScriptConverter = class
Public MustInherit Class JavaScriptConverter
Overname
JavaScriptConverter

Voorbeelden

In het volgende voorbeeld ziet u hoe u een aangepast conversieprogramma voor de ListItemCollection klasse maakt.

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

Opmerkingen

Met de JavaScriptConverter klasse kunt u serialisatie- en deserialisatieprocessen implementeren voor beheerde typen die niet systeemeigen worden ondersteund door de JavaScriptSerializer klasse. U kunt ook gebruiken JavaScriptConverter wanneer u meer controle nodig hebt over het serialisatie- en deserialisatieproces.

De SupportedTypes eigenschap geeft de typen aan waarvoor een aangepast conversieprogramma conversieservices biedt.

Als u wilt aangeven dat een aangepast conversieprogramma moet worden gebruikt door het JavaScriptSerializer exemplaar, moet u het conversieprogramma registreren bij het exemplaar. Als u de JavaScriptSerializer klasse rechtstreeks gebruikt, moet u de RegisterConverters methode gebruiken om het conversieprogramma te registreren. Als u anders webmethoden aanroept vanuit ECMAScript (JavaScript) en u het aangepaste conversieprogramma wilt gebruiken, kunt u dit registreren door een converters element toe te voegen in het configuratiebestand. Zie How to: Configure ASP.NET Services in Microsoft Ajax voor meer informatie.

Wanneer het JavaScriptSerializer exemplaar een type serialiseert waarvoor een aangepast conversieprogramma is geregistreerd, roept de serializer de Serialize methode aan. Op dezelfde manier wordt door de JavaScriptSerializer instantie een JSON-tekenreeks (JavaScript Object Notation) gedeserialiseerd en herkend dat aan een type in de JSON-tekenreeks een aangepast conversieprogramma is gekoppeld, de serializer de Deserialize methode aanroept.

Notities voor uitvoerders

Wanneer u overdrat van JavaScriptConverter, moet u de volgende leden overschrijven:

Constructors

Name Description
JavaScriptConverter()

Initialiseert een nieuw exemplaar van de JavaScriptConverter klasse.

Eigenschappen

Name Description
SupportedTypes

Wanneer deze wordt overschreven in een afgeleide klasse, haalt u een verzameling van de ondersteunde typen op.

Methoden

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

Wanneer deze wordt overschreven in een afgeleide klasse, converteert u de opgegeven woordenlijst naar een object van het opgegeven type.

Equals(Object)

Bepaalt of het opgegeven object gelijk is aan het huidige object.

(Overgenomen van Object)
GetHashCode()

Fungeert als de standaardhashfunctie.

(Overgenomen van Object)
GetType()

Hiermee haalt u de Type huidige instantie op.

(Overgenomen van Object)
MemberwiseClone()

Hiermee maakt u een ondiepe kopie van de huidige Object.

(Overgenomen van Object)
Serialize(Object, JavaScriptSerializer)

Wanneer deze wordt overschreven in een afgeleide klasse, bouwt u een woordenlijst met naam-/waardeparen.

ToString()

Retourneert een tekenreeks die het huidige object vertegenwoordigt.

(Overgenomen van Object)

Van toepassing op

Zie ook