JavaScriptConverter Osztály
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Absztrakt alaposztályt biztosít egy egyéni típuskonverterhez.
public ref class JavaScriptConverter abstract
public abstract class JavaScriptConverter
type JavaScriptConverter = class
Public MustInherit Class JavaScriptConverter
- Öröklődés
-
JavaScriptConverter
Példák
Az alábbi példa bemutatja, hogyan hozhat létre egyéni konvertert az ListItemCollection osztályhoz.
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
Megjegyzések
Az JavaScriptConverter osztály lehetővé teszi szerializálási és deszerializálási folyamatok implementálását olyan felügyelt típusok esetében, amelyeket az JavaScriptSerializer osztály nem támogat natív módon. Akkor is használható JavaScriptConverter , ha a szerializálási és deszerializálási folyamat nagyobb mértékű szabályozására van szüksége.
A SupportedTypes tulajdonság azokat a típusokat jelzi, amelyekhez az egyéni konverter konverter szolgáltatásokat nyújt.
Annak jelzéséhez, hogy a JavaScriptSerializer példánynak egyéni konvertert kell használnia, regisztrálnia kell a konvertert a példányon. Ha közvetlenül az osztályt JavaScriptSerializer használja, használja a RegisterConverters metódust a konverter regisztrálásához. Ellenkező esetben, ha az ECMAScriptből (JavaScript) származó webes metódusokat invokál, és az egyéni konvertert szeretné használni, regisztrálhatja azt a konfigurációs fájl egy converters elemének hozzáadásával. További információ: Hogyan is: ASP.NET-szolgáltatások konfigurálása Microsoft Ajax.
Ha a JavaScriptSerializer példány szerializál egy olyan típust, amelyhez egyéni konverter van regisztrálva, a szerializáló meghívja a metódust Serialize . Hasonlóképpen, ha a JavaScriptSerializer példány deszerializál egy JavaScript Object Notation (JSON) sztringet, és felismeri, hogy a JSON-sztringen belüli típushoz egyéni konverter van társítva, a szerializáló meghívja a metódust Deserialize .
Megjegyzések az implementálókhoz
Ha örököl, JavaScriptConverterfelül kell bírálnia a következő tagokat:
Deserialize(IDictionary<String,Object>, Type, JavaScriptSerializer)
SupportedTypes JavaScriptSerializer megadja a metódust, amelyet a ConvertToType<T>(Object) program implementálói JavaScriptConverterfognak használni. A konverterkódnak képesnek kell lennie arra, hogy a szerializáló által a szótárban található értéket átvegye, majd ezt az értéket típusobjektummá
Talakítsa. Ahelyett, hogy újra implementálja az egyéni konverziós kódot ennek érdekében, meghívhatja a metódust ConvertToType<T>(Object) .
Konstruktorok
| Name | Description |
|---|---|
| JavaScriptConverter() |
Inicializálja a JavaScriptConverter osztály új példányát. |
Tulajdonságok
| Name | Description |
|---|---|
| SupportedTypes |
Ha felül van bírálva egy származtatott osztályban, lekéri a támogatott típusok gyűjteményét. |
Metódusok
| Name | Description |
|---|---|
| Deserialize(IDictionary<String,Object>, Type, JavaScriptSerializer) |
Ha egy származtatott osztályban felül van bírálva, a megadott szótárt a megadott típusú objektummá alakítja. |
| Equals(Object) |
Meghatározza, hogy a megadott objektum egyenlő-e az aktuális objektummal. (Öröklődés forrása Object) |
| GetHashCode() |
Ez az alapértelmezett kivonatoló függvény. (Öröklődés forrása Object) |
| GetType() |
Lekéri az Type aktuális példányt. (Öröklődés forrása Object) |
| MemberwiseClone() |
Az aktuális Objectpéldány sekély másolatát hozza létre. (Öröklődés forrása Object) |
| Serialize(Object, JavaScriptSerializer) |
Ha felül van bírálva egy származtatott osztályban, létrehoz egy név-érték párok szótárát. |
| ToString() |
Az aktuális objektumot jelképező sztringet ad vissza. (Öröklődés forrása Object) |