JavaScriptConverter Klass
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Tillhandahåller en abstrakt basklass för en konverterare av anpassad typ.
public ref class JavaScriptConverter abstract
public abstract class JavaScriptConverter
type JavaScriptConverter = class
Public MustInherit Class JavaScriptConverter
- Arv
-
JavaScriptConverter
Exempel
I följande exempel visas hur du skapar en anpassad konverterare för ListItemCollection klassen.
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
Kommentarer
Med JavaScriptConverter klassen kan du implementera serialiserings- och deserialiseringsprocesser för hanterade typer som inte stöds internt av JavaScriptSerializer klassen. Du kan också använda JavaScriptConverter när du behöver mer kontroll över serialiserings- och deserialiseringsprocessen.
Egenskapen SupportedTypes anger de typer för vilka en anpassad konverterare tillhandahåller konverterartjänster.
Om du vill ange att en anpassad konverterare måste användas av instansen JavaScriptSerializer måste du registrera konverteraren med instansen. Om du använder JavaScriptSerializer klassen direkt bör du använda RegisterConverters metoden för att registrera konverteraren. Om du anropar webbmetoder från ECMAScript (JavaScript) och vill använda den anpassade konverteraren kan du registrera den genom att lägga till ett converters element i konfigurationsfilen. Mer information finns i Hur du: Konfigurera ASP.NET Services i Microsoft Ajax.
När instansen JavaScriptSerializer serialiserar en typ som den har en anpassad konverterare registrerad för anropar serialiseraren Serialize metoden. På samma sätt anropar serialiseraren metoden när instansen JavaScriptSerializer deserialiserar en JSON-sträng (JavaScript Object Notation) och identifierar att en typ i JSON-strängen har en anpassad konverterare associerad med den Deserialize .
Anteckningar till implementerare
När du ärver från JavaScriptConvertermåste du åsidosätta följande medlemmar:
Deserialize(IDictionary<String,Object>, Type, JavaScriptSerializer)
SupportedTypes JavaScriptSerializer tillhandahåller den ConvertToType<T>(Object) metod som ska användas av implementerare av JavaScriptConverter. Konverterarens kod måste kunna ta ett värde som finns i ordlistan som serialiseraren skickar till den och sedan konvertera det värdet till ett objekt av typen
T. I stället för att implementera den anpassade konverteringskoden igen kan du anropa ConvertToType<T>(Object) metoden.
Konstruktorer
| Name | Description |
|---|---|
| JavaScriptConverter() |
Initierar en ny instans av JavaScriptConverter klassen. |
Egenskaper
| Name | Description |
|---|---|
| SupportedTypes |
När du åsidosättas i en härledd klass hämtar du en samling av de typer som stöds. |
Metoder
| Name | Description |
|---|---|
| Deserialize(IDictionary<String,Object>, Type, JavaScriptSerializer) |
När den åsidosättas i en härledd klass konverterar den angivna ordlistan till ett objekt av den angivna typen. |
| Equals(Object) |
Avgör om det angivna objektet är lika med det aktuella objektet. (Ärvd från Object) |
| GetHashCode() |
Fungerar som standard-hash-funktion. (Ärvd från Object) |
| GetType() |
Hämtar den aktuella instansen Type . (Ärvd från Object) |
| MemberwiseClone() |
Skapar en ytlig kopia av den aktuella Object. (Ärvd från Object) |
| Serialize(Object, JavaScriptSerializer) |
När du åsidosättas i en härledd klass skapar du en ordlista med namn/värde-par. |
| ToString() |
Returnerar en sträng som representerar det aktuella objektet. (Ärvd från Object) |