DesignerSerializationManager Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Stellt eine Implementierung der IDesignerSerializationManager Schnittstelle bereit.
public ref class DesignerSerializationManager : IServiceProvider, System::ComponentModel::Design::Serialization::IDesignerSerializationManager
public class DesignerSerializationManager : IServiceProvider, System.ComponentModel.Design.Serialization.IDesignerSerializationManager
type DesignerSerializationManager = class
interface IDesignerSerializationManager
interface IServiceProvider
Public Class DesignerSerializationManager
Implements IDesignerSerializationManager, IServiceProvider
- Vererbung
-
DesignerSerializationManager
- Implementiert
Hinweise
Die IDesignerSerializationManager Schnittstelle ist als formatunabhängige Schnittstelle für ein Objekt konzipiert, das die Serialisierung steuert. Es stellt im Wesentlichen Kontext und Dienste für Serialisierer bereit, die tatsächlich die Deserialisierung ausführen. IDesignerSerializationManager unterstützt den Deserialisierungsprozess, indem Objekte nachverfolgt werden. Dies ähnelt der Technik der IDesignerHost Benutzeroberfläche: Designer stellen tatsächlich die Benutzeroberfläche (UI) bereit und IDesignerHost stellen den Klebstoff bereit, der es verschiedenen Designern ermöglicht, zusammenzuarbeiten.
Die DesignerSerializationManager Klasse implementiert IDesignerSerializationManager. Es wurde entwickelt, um eine generische Form der Deserialisierung bereitzustellen, die den Laufzeit serialisierern wie der BinaryFormatter.
Die DesignerSerializationManager Klasse erreicht drei Ziele:
Es handelt sich um ein einfaches, turnkey-Objekt, das zum Deserialisieren einer Vielzahl von Formaten verwendet werden kann.
Es ist generisch und nicht an ein bestimmtes Format gebunden. Sie kann auch für die CodeDOM-Deserialisierung sowie für die Markup-Deserialisierung verwendet werden.
Es ist erweiterbar und unterstützt verschiedene Serialisierungsmethoden, die in Kopier-/Einfüge- und Rückgängig-/Wiederholen-Szenarien verwendet werden.
Die Entwurfszeit-Serialisierung unterscheidet sich von der Serialisierung des Laufzeitobjekts:
Das Objekt, das die Serialisierung ausführt, ist in der Regel vom Laufzeitobjekt getrennt, sodass Entwurfszeitlogik aus einer Komponente entfernt werden kann.
Das Serialisierungsschema setzt voraus, dass das Objekt vollständig initialisiert und dann durch Eigenschaften- und Methodenaufrufe während der Deserialisierung geändert wird.
Eigenschaften eines Objekts mit Werten, die nie für das Objekt festgelegt wurden (die Eigenschaften enthalten die Standardwerte), werden nicht serialisiert. Umgekehrt kann der Deserialisierungsstrom Löcher aufweisen.
Der Schwerpunkt liegt auf der Qualität des Inhalts innerhalb des Serialisierungsstreams und nicht auf der vollständigen Serialisierung eines Objekts. Dies bedeutet, dass, wenn es keine definierte Methode zum Serialisieren eines Objekts gibt, dieses Objekt möglicherweise übersprungen wird, anstatt eine Ausnahme auszuwerfen. Das Serialisierungsmodul kann hier Heuristiken bereitstellen, um zu entscheiden, welche Fehler ignoriert werden können und welche nicht wiederhergestellt werden können.
Der Serialisierungsstream enthält möglicherweise mehr Daten als für die Deserialisierung erforderlich ist. Die Serialisierung des Quellcodes enthält z. B. einen Gemischten Benutzercode mit dem Code, der zum Deserialisieren eines Objektdiagramms erforderlich ist. Dieser Benutzercode muss bei der Deserialisierung ignoriert und bei der Serialisierung beibehalten werden.
Aufgrund dieser Unterschiede gilt ein anderes Serialisierungsmodell für die Entwurfszeit-Serialisierung. Dieses Modell verwendet ein separates Serialisierungsobjekt für jeden Datentyp, der serialisiert wird. Jeder Serialisierer leistet seinen kleinen Beitrag zum Problem insgesamt. Diese Serialisierer werden alle über einen gemeinsamen Serialisierungs-Manager koordiniert. Der Serialisierungs-Manager ist für die Aufrechterhaltung des Zustands zwischen diesen verschiedenen Serialisierern verantwortlich. Betrachten Sie beispielsweise die folgende Klasse:
public class SampleObject
{
private string stringValue = null;
private int intValue = int.MinValue;
public string StringProperty
{
get { return this.stringValue; }
set { this.stringValue = value; }
}
public int IntProperty
{
get { return this.intValue; }
set{ this.intValue = value; }
}
}
Public Class SampleObject
Private stringValue As String = Nothing
Private intValue As Integer = Integer.MinValue
Public Property StringProperty() As String
Get
Return Me.stringValue
End Get
Set
Me.stringValue = value
End Set
End Property
Public Property IntProperty() As Integer
Get
Return Me.intValue
End Get
Set
Me.intValue = value
End Set
End Property
End Class
Eine Instanz dieser Klasse würde drei verschiedene Serialisierer verwenden: eine für SampleObject, eine für Zeichenfolgen und eine für ganze Zahlen. The serializer for SampleObject is called the root serializer because SampleObject is the root of the serialization graph. Komplexere Objektdiagramme können ebenfalls erstellt werden. Überlegen Sie beispielsweise, was passiert, wenn SampleObject sie wie folgt geändert würden:
public class SampleObject
{
private string stringValue = null;
private int intValue = int.MinValue;
private SampleObject childValue = null;
public string StringProperty
{
get { return this.stringValue; }
set { this.stringValue = value; }
}
public int IntProperty
{
get { return this.intValue; }
set { this.intValue = value; }
}
public SampleObject Child
{
get { return this.childValue; }
set { this.childValue = value; }
}
}
Public Class SampleObject
Private stringValue As String = Nothing
Private intValue As Integer = Integer.MinValue
Private childValue As SampleObject = Nothing
Public Property StringProperty() As String
Get
Return Me.stringValue
End Get
Set
Me.stringValue = value
End Set
End Property
Public Property IntProperty() As Integer
Get
Return Me.intValue
End Get
Set
Me.intValue = value
End Set
End Property
Public Property Child() As SampleObject
Get
Return Me.childValue
End Get
Set
Me.childValue = value
End Set
End Property
End Class
Dadurch kann SampleObject ein untergeordnetes Element vorhanden sein, das eine andere Instanz von sich selbst ist. Der folgende Code füllt das Objektdiagramm aus:
class Program
{
static void Main(string[] args)
{
SampleObject root = new SampleObject();
SampleObject currentObject = root;
for (int i = 0; i < 10; i++)
{
SampleObject o = new SampleObject();
currentObject.Child = o;
currentObject = o;
}
}
}
Class Program
Public Overloads Shared Sub Main()
Main(System.Environment.GetCommandLineArgs())
End Sub
Overloads Shared Sub Main(args() As String)
Dim root As New SampleObject()
Dim currentObject As SampleObject = root
Dim i As Integer
For i = 0 To 9
Dim o As New SampleObject()
currentObject.Child = o
currentObject = o
Next i
End Sub
End Class
Wenn root serialisiert wird, werden vier Serialisierer verwendet: ein Stamm-Serialisierer, ein Serialisierer für das untergeordnete Element SampleObject, ein Serialisierer für intund ein Serialisierer für string. Serialisierer werden basierend auf dem Typ zwischengespeichert, daher ist es nicht erforderlich, für jede Instanz von SampleObject.
Die DesignerSerializationManager Klasse basiert auf der Idee einer Serialisierungssitzung. Eine Sitzung verwaltet den Zustand, auf den von den verschiedenen Serialisierern zugegriffen werden kann. Wenn eine Sitzung verworfen wird, wird dieser Zustand zerstört. Dadurch können Sie sicherstellen, dass Serialisierer weitgehend zustandslos bleiben und Serialisierer bereinigen können, die beschädigt wurden. In den folgenden Tabellen wird beschrieben, wie der Zustand in und zwischen Sitzungen verwaltet wird.
Globaler Status
Dieser Zustand gehört dem Serialisierungs-Manager-Objekt, ist jedoch unabhängig von der aktuellen Serialisierungssitzung.
| Objekt | Verwendung |
|---|---|
| Serialisierungsanbieter | Objekte können sich selbst als benutzerdefinierte Serialisierungsanbieter hinzufügen. Da diese Anbieter verwendet werden, um Serialisierer zu finden, erleben sie eine Serialisierungssitzung. |
Session-Owned Staat
Dieser Zustand gehört einer Sitzung und wird zerstört, wenn eine Sitzung zerstört wird. Folglich löst der Zugriff auf eigenschaften oder Methoden, die diesen Zustand bearbeiten würden, eine Ausnahme aus, wenn sich der Serialisierungs-Manager nicht in einer aktiven Sitzung befindet.
| Objekt | Verwendung |
|---|---|
| ResolveName-Ereignis | Das ResolveName Ereignis wird von einem Serialisierer angefügt, um zusätzliche Auflösungen von Namen bereitzustellen. Alle Handler werden von diesem Ereignis getrennt, wenn eine Sitzung beendet wird. |
| SerializationComplete-Ereignis | Das SerializationComplete Ereignis wird direkt vor dem Löschen einer Sitzung ausgelöst. Anschließend werden alle Handler von diesem Ereignis getrennt. |
| Name-Tabelle | Der Serialisierungs-Manager verwaltet eine Tabelle, die zwischen Objekten und ihren Namen zuordnet. Serialisierer können Objekten Namen zur einfachen Identifizierung geben. Diese Namenstabelle wird gelöscht, wenn die Sitzung beendet wird. |
| Serialisierungscache | Der Serialisierungs-Manager verwaltet einen Cache von Serialisierern, die zur Bereitstellung aufgefordert wurden. Dieser Cache wird gelöscht, wenn die Sitzung beendet wird. Die öffentliche GetSerializer Methode kann jederzeit sicher aufgerufen werden, der Wert wird jedoch nur zwischengespeichert, wenn sie innerhalb einer Sitzung aufgerufen wird. |
| Kontextstapel | Der Serialisierungs-Manager verwaltet ein Objekt, das als Kontextstapel bezeichnet wird, auf das Sie mit der Context Eigenschaft zugreifen können. Serialisierer können diesen Stapel verwenden, um zusätzliche Informationen zu speichern, die für andere Serialisierer verfügbar sind. Beispielsweise kann ein Serialisierer, der einen Eigenschaftswert serialisiert, den Eigenschaftennamen im Serialisierungsstapel pushen, bevor der Wert serialisiert werden soll. Dieser Stapel wird gelöscht, wenn die Sitzung beendet wird. |
| Fehlerliste | Der Serialisierungs-Manager verwaltet eine Liste der Fehler, die während der Serialisierung aufgetreten sind. Diese Liste, auf die über die Errors Eigenschaft zugegriffen wird, wird gelöscht, wenn die Sitzung beendet wird. Der Zugriff auf die Errors Eigenschaft zwischen Sitzungen führt zu einer Ausnahme. |
Konstruktoren
| Name | Beschreibung |
|---|---|
| DesignerSerializationManager() |
Initialisiert eine neue Instanz der DesignerSerializationManager-Klasse. |
| DesignerSerializationManager(IServiceProvider) |
Initialisiert eine neue Instanz der DesignerSerializationManager Klasse mit dem angegebenen Dienstanbieter. |
Eigenschaften
| Name | Beschreibung |
|---|---|
| Container |
Ruft den Container für diesen Serialisierungs-Manager ab oder legt diesen fest. |
| Errors |
Ruft die Liste der Fehler ab, die während der Serialisierung oder Deserialisierung aufgetreten sind. |
| PreserveNames |
Dient zum Abrufen oder Festlegen eines Werts, der angibt, ob die CreateInstance(Type, ICollection, String, Boolean) Methode auf das Vorhandensein des angegebenen Namens im Container überprüfen soll. |
| PropertyProvider |
Ruft das Objekt ab, das zum Bereitstellen von Eigenschaften für die Eigenschaft des Serialisierungs-Managers Properties verwendet werden soll. |
| RecycleInstances |
Dient zum Abrufen oder Festlegen eines Werts, der angibt, ob CreateInstance(Type, ICollection, String, Boolean) immer eine neue Instanz eines Typs erstellt wird. |
| ValidateRecycledTypes |
Dient zum Abrufen oder Festlegen eines Werts, der angibt, ob die CreateInstance(Type, ICollection, String, Boolean) Methode überprüft, ob übereinstimmende Namen auf denselben Typ verweisen. |
Methoden
| Name | Beschreibung |
|---|---|
| CreateInstance(Type, ICollection, String, Boolean) |
Erstellt eine Instanz eines Typs. |
| CreateSession() |
Erstellt eine neue Serialisierungssitzung. |
| Equals(Object) |
Bestimmt, ob das angegebene Objekt dem aktuellen Objekt entspricht. (Geerbt von Object) |
| GetHashCode() |
Dient als Standardhashfunktion. (Geerbt von Object) |
| GetRuntimeType(String) |
Ruft den Typ ab, der dem angegebenen Typnamen entspricht. |
| GetSerializer(Type, Type) |
Ruft den Serialisierer für den angegebenen Objekttyp ab. |
| GetService(Type) |
Ruft den angeforderten Dienst ab. |
| GetType() |
Ruft die Type der aktuellen Instanz ab. (Geerbt von Object) |
| GetType(String) |
Ruft den angeforderten Typ ab. |
| MemberwiseClone() |
Erstellt eine flache Kopie der aktuellen Object. (Geerbt von Object) |
| OnResolveName(ResolveNameEventArgs) |
Löst das ResolveName-Ereignis aus. |
| OnSessionCreated(EventArgs) |
Löst das SessionCreated-Ereignis aus. |
| OnSessionDisposed(EventArgs) |
Löst das SessionDisposed-Ereignis aus. |
| ToString() |
Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Geerbt von Object) |
Ereignisse
| Name | Beschreibung |
|---|---|
| SessionCreated |
Tritt auf, wenn eine Sitzung erstellt wird. |
| SessionDisposed |
Tritt auf, wenn eine Sitzung verworfen wird. |
Explizite Schnittstellenimplementierungen
| Name | Beschreibung |
|---|---|
| IDesignerSerializationManager.AddSerializationProvider(IDesignerSerializationProvider) |
Fügt dem Serialisierungs-Manager einen benutzerdefinierten Serialisierungsanbieter hinzu. |
| IDesignerSerializationManager.Context |
Ruft den Kontextstapel für diese Serialisierungssitzung ab. |
| IDesignerSerializationManager.CreateInstance(Type, ICollection, String, Boolean) |
Implementiert die CreateInstance(Type, ICollection, String, Boolean) Methode. |
| IDesignerSerializationManager.GetInstance(String) |
Ruft eine Instanz eines erstellten Objekts des angegebenen Namens ab. |
| IDesignerSerializationManager.GetName(Object) |
Ruft einen Namen für das angegebene Objekt ab. |
| IDesignerSerializationManager.GetSerializer(Type, Type) |
Ruft einen Serialisierer des angeforderten Typs für den angegebenen Objekttyp ab. |
| IDesignerSerializationManager.GetType(String) |
Ruft einen Typ des angegebenen Namens ab. |
| IDesignerSerializationManager.Properties |
Implementiert die Properties Eigenschaft. |
| IDesignerSerializationManager.RemoveSerializationProvider(IDesignerSerializationProvider) |
Entfernt einen zuvor hinzugefügten Serialisierungsanbieter. |
| IDesignerSerializationManager.ReportError(Object) |
Wird verwendet, um einen wiederherstellbaren Fehler in der Serialisierung zu melden. |
| IDesignerSerializationManager.ResolveName |
Tritt auf, wenn IDesignerSerializationManager.GetName(Object) der angegebene Name in der Namenstabelle des Serialisierungs-Managers nicht gefunden werden kann. |
| IDesignerSerializationManager.SerializationComplete |
Tritt auf, wenn die Serialisierung abgeschlossen ist. |
| IDesignerSerializationManager.SetName(Object, String) |
Legt den Namen für das angegebene Objekt fest. |
| IServiceProvider.GetService(Type) |
Eine Beschreibung dieses Elements finden Sie in der GetService(Type) Methode. |