JavaScriptConverter Třída

Definice

Poskytuje abstraktní základní třídu pro převaděč vlastního typu.

public ref class JavaScriptConverter abstract
public abstract class JavaScriptConverter
type JavaScriptConverter = class
Public MustInherit Class JavaScriptConverter
Dědičnost
JavaScriptConverter

Příklady

Následující příklad ukazuje, jak vytvořit vlastní převaděč pro ListItemCollection třídu.

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

Poznámky

Třída JavaScriptConverter umožňuje implementovat serializace a deserializační procesy pro spravované typy, které nejsou nativně podporovány JavaScriptSerializer třídou. Můžete také použít JavaScriptConverter , pokud potřebujete větší kontrolu nad serializací a deserializačním procesem.

Vlastnost SupportedTypes označuje typy, pro které vlastní převaděč poskytuje služby převaděče.

Chcete-li označit, že vlastní převaděč musí být používán JavaScriptSerializer instancí, je nutné zaregistrovat převaděč v instanci. Pokud třídu používáte JavaScriptSerializer přímo, měli byste použít metodu RegisterConverters pro registraci převaděče. Pokud v opačném případě vyvoláte webové metody z ECMAScript (JavaScript) a chcete použít vlastní převaděč, můžete ho zaregistrovat přidáním converters elementu do konfiguračního souboru. Další informace naleznete v tématu Postupy: Konfigurace služeb ASP.NET v aplikaci Microsoft Ajax.

JavaScriptSerializer Pokud instance serializuje typ, pro který má zaregistrovaný vlastní převaděč, serializátor volá metoduSerialize. Podobně když JavaScriptSerializer instance deserializuje řetězec JSON (JavaScript Object Notation) a rozpozná, že typ uvnitř řetězce JSON má vlastní převaděč přidružený, serializátor volá metodu Deserialize .

Poznámky pro implementátory

Když dědíte z JavaScriptConverter, musíte přepsat následující členy:

Konstruktory

JavaScriptConverter()

Inicializuje novou instanci JavaScriptConverter třídy.

Vlastnosti

SupportedTypes

Při přepsání v odvozené třídě získá kolekci podporovaných typů.

Metody

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

Při přepsání v odvozené třídě převede zadaný slovník na objekt zadaného typu.

Equals(Object)

Určí, zda se zadaný objekt rovná aktuálnímu objektu.

(Zděděno od Object)
GetHashCode()

Slouží jako výchozí funkce hash.

(Zděděno od Object)
GetType()

Type Získá aktuální instanci.

(Zděděno od Object)
MemberwiseClone()

Vytvoří použádnou kopii aktuálního souboru Object.

(Zděděno od Object)
Serialize(Object, JavaScriptSerializer)

Při přepsání v odvozené třídě sestaví slovník párů name/value.

ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)

Platí pro

Viz také