JavaScriptConverter クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
カスタム型コンバーターの抽象基本クラスを提供します。
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
追加して登録できます。 詳細については、「方法: Microsoft Ajax で ASP.NET Services を構成する」を参照してください。
カスタム コンバーターが JavaScriptSerializer 登録されている型をインスタンスがシリアル化している場合、シリアライザーはメソッドを Serialize 呼び出します。 同様に、インスタンスが JavaScript Object Notation (JSON) 文字列を逆シリアル化し、JSON 文字列内の型にカスタム コンバーターが関連付けられていることを認識すると JavaScriptSerializer 、シリアライザーはメソッドを Deserialize 呼び出します。
注意 (実装者)
継承 JavaScriptConverterする場合は、次のメンバーをオーバーライドする必要があります。
Deserialize(IDictionary<String,Object>, Type, JavaScriptSerializer)
SupportedTypesJavaScriptSerializerConvertToType<T>(Object)の実装者が使用するメソッドをJavaScriptConverter提供します。 コンバーター コードは、シリアライザーが渡すディクショナリに含まれる値を受け取り、その値を型
T
のオブジェクトに変換できる必要があります。 これを実現するためにカスタム変換コードを再実装するのではなく、メソッドを ConvertToType<T>(Object) 呼び出すことができます。
コンストラクター
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) |