次の方法で共有


JavaScriptConverter クラス

定義

カスタム型コンバーターの抽象基本クラスを提供します。

public ref class JavaScriptConverter abstract
public abstract class JavaScriptConverter
type JavaScriptConverter = class
Public MustInherit Class JavaScriptConverter
継承
JavaScriptConverter

次の例は、 クラスのカスタム コンバーターを作成する方法を ListItemCollection 示しています。

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

注釈

JavaScriptConverterクラスを使用すると、 クラスでネイティブにサポートされていないマネージド型のシリアル化および逆シリアル化プロセスをJavaScriptSerializer実装できます。 シリアル化と逆シリアル化のプロセスをより細かく制御する必要がある場合にも を使用 JavaScriptConverter できます。

プロパティは SupportedTypes 、カスタム コンバーターがコンバーター サービスを提供する型を示します。

カスタム コンバーターをインスタンスで JavaScriptSerializer 使用する必要があることを示すには、そのコンバーターを インスタンスに登録する必要があります。 クラスを JavaScriptSerializer 直接使用している場合は、 メソッドを RegisterConverters 使用してコンバーターを登録する必要があります。 それ以外の場合は、ECMAScript (JavaScript) から Web メソッドを呼び出し、カスタム コンバーターを使用する場合は、構成ファイルに 要素を converters 追加して登録できます。 詳細については、「 How to: Configure ASP.NET Services in Microsoft Ajax」を参照してください。

インスタンスが JavaScriptSerializer カスタム コンバーターが登録されている型をシリアル化する場合、シリアライザーは メソッドを Serialize 呼び出します。 同様に、インスタンスが JavaScriptSerializer JavaScript Object Notation (JSON) 文字列を逆シリアル化し、JSON 文字列内の型にカスタム コンバーターが関連付けられていることを認識すると、シリアライザーは メソッドを Deserialize 呼び出します。

注意 (実装者)

から JavaScriptConverter継承する場合は、次のメンバーをオーバーライドする必要があります。

コンストラクター

JavaScriptConverter()

JavaScriptConverter クラスの新しいインスタンスを初期化します。

プロパティ

SupportedTypes

派生クラスでオーバーライドされた場合、サポートされている型のコレクションを取得します。

メソッド

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

派生クラスでオーバーライドされた場合、提供されたディクショナリを、指定された型のオブジェクトに変換します。

Equals(Object)

指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

(継承元 Object)
GetHashCode()

既定のハッシュ関数として機能します。

(継承元 Object)
GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
MemberwiseClone()

現在の Object の簡易コピーを作成します。

(継承元 Object)
Serialize(Object, JavaScriptSerializer)

派生クラスでオーバーライドされた場合、名前/値ペアのディクショナリを構築します。

ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)

適用対象

こちらもご覧ください