Serialisierung und Speicherung von DokumentenDocument Serialization and Storage

Microsoft .NET FrameworkMicrosoft .NET Framework bietet eine leistungsfähige Umgebung zum Erstellen und Anzeigen qualitativ hochwertiger Dokumente. provides a powerful environment for creating and displaying high quality documents. Erweiterte Funktionen zur Unterstützung von sowohl fixierten als auch Flussdokumenten sowie erweiterte Anzeigesteuerelemente in Kombination mit leistungsstarken 2D- und 3D-Grafikfunktionen führen .NET Framework.NET Framework-Anwendungen auf ein neues Level in Bezug auf Qualität und Benutzerfreundlichkeit.Enhanced features that support both fixed-documents and flow-documents, advanced viewing controls, combined with powerful 2D and 3D graphic capabilities take .NET Framework.NET Framework applications to a new level of quality and user experience. Eine der wichtigsten Funktionen von .NET Framework.NET Framework ist die flexible Verwaltung der speicherinternen Darstellung eines Dokuments. Die Möglichkeit, Dokumente effizient zu speichern und aus einem Datenspeicher zu laden, ist eine Anforderung, die an nahezu jede Anwendung gestellt wird.Being able to flexibly manage an in-memory representation of a document is a key feature of .NET Framework.NET Framework, and being able to efficiently save and load documents from a data store is a need of almost every application. Der Prozess der Konvertierung eines Dokuments aus einer speicherinternen Darstellung in einen externen Datenspeicher wird als Serialisierung bezeichnet.The process of converting a document from an internal in-memory representation to an external data store is termed serialization. Der umgekehrte Vorgang des Lesens eines Datenspeichers und Neuerstellens der ursprünglichen Instanz im Speicher wird Deserialisierung genannt.The reverse process of reading a data store and recreating the original in-memory instance is termed deserialization.

Informationen zur DokumentserialisierungAbout Document Serialization

Im Idealfall ist der Prozess der Serialisierung und Deserialisierung eines Dokuments aus dem Speicher und wieder zurück für die Anwendung transparent.Ideally the process of serializing and deserializing a document from and then back into memory is transparent to the application. Die Anwendung ruft die Write-Methode des Serialisierungsprogramms auf, um das Dokument zu speichern. Die Read-Methode des Deserialisierungsprogramms greift dagegen auf den Datenspeicher zu und erstellt die ursprüngliche Instanz im Speicher neu.The application calls a serializer "write" method to save the document, while a deserializer "read" method accesses the data store and recreates the original instance in memory. Das jeweilige Format, in dem die Daten gespeichert werden, ist für die Anwendung normalerweise nicht relevant, solange der Serialisierungs- und Deserialisierungsprozess das Dokument wieder in seiner ursprünglichen Form erstellt.The specific format that the data is stored in is generally not a concern of the application as long as the serialize and deserialize process recreates the document back to its original form.

Oft bieten Anwendungen mehrere Serialisierungsoptionen, die dem Benutzer die Speicherung von Dokumenten auf ein anderes Medium oder in ein anderes Format ermöglichen.Applications often provide multiple serialization options which allow the user to save documents to different medium or to a different format. So kann eine Anwendung z.B. „Speichern unter“-Optionen anbieten, um ein Dokument in eine Datenträgerdatei, Datenbank oder einen Webdienst zu speichern.For example, an application might offer "Save As" options to store a document to a disk file, database, or web service. Entsprechend können verschiedene Serialisierungsprogramme das Dokument in verschiedenen Formaten speichern, wie etwa HTML, RTF, XML, XPS oder das Format eines Drittanbieters.Similarly, different serializers could store the document in different formats such as in HTML, RTF, XML, XPS, or alternately to a third-party format. Für die Anwendung wird eine Schnittstelle definiert, die die Details des Speichermediums innerhalb der Implementierung jedes einzelnen Serialisierungsprogramms isoliert.To the application, serialization defines an interface that isolates the details of the storage medium within the implementation of each specific serializer. Zusätzlich zu den Vorteilen der Kapselung von Speicherdetails die .NET Framework.NET Framework System.Windows.Documents.Serialization APIsAPIs einige wichtigen Funktionen bereitzustellen.In addition to the benefits of encapsulating storage details, the .NET Framework.NET Framework System.Windows.Documents.Serialization APIsAPIs provide several other important features.

Funktionen der Dokumentserialisierungsprogramme von .NET Framework 3.0Features of .NET Framework 3.0 Document Serializers

  • Durch direkten Zugriff auf Dokumentobjekte der höheren Ebene (logische Struktur und visuelle Elemente) wird eine effiziente Speicherung von aufgeteiltem Inhalt, 2D-/3D-Elementen, Bildern, Medien, Hyperlinks, Anmerkungen und anderen Supportinhalten aktiviert.Direct access to the high-level document objects (logical tree and visuals) enable efficient storage of paginated content, 2D/3D elements, images, media, hyperlinks, annotations, and other support content.

  • Synchrone und asynchrone VorgängeSynchronous and asynchronous operation.

  • Unterstützung für Plug-In-Serialisierungsprogramme mit erweiterten Funktionen:Support for plug-in serializers with enhanced capabilities:

    • Systemweiter Zugriff für die Verwendung durch alle .NET Framework.NET Framework-AnwendungenSystem-wide access for use by all .NET Framework.NET Framework applications.

    • Einfache Erkennbarkeit von Anwendungs-Plug-InsSimple application plug-in discoverability.

    • Einfache Bereitstellung, Installation und Update von benutzerdefinierten Drittanbieter-Plug-InsSimple deployment, installation, and update for custom third-party plug-ins.

    • Unterstützung von Benutzeroberflächen für benutzerdefinierte Laufzeiteinstellungen und -optionenUser interface support for custom run-time settings and options.

XPS-DruckpfadXPS Print Path

Der Microsoft .NET FrameworkMicrosoft .NET Framework XPSXPS-Druckpfad bietet auch einen erweiterbaren Mechanismus zum Schreiben von Dokumenten durch die Druckausgabe.The Microsoft .NET FrameworkMicrosoft .NET Framework XPSXPS print path also provides an extensible mechanism for writing documents through print output. XPSXPS dient gleichzeitig als Dokumentdateiformat und natives Druckerspoolerformat für Windows VistaWindows Vista. serves as both a document file format and is the native print spool format for Windows VistaWindows Vista. XPSXPS-Dokumente können ohne Konvertierung in ein Zwischenformat direkt an XPSXPS-kompatible Drucker geschickt werden. documents can be sent directly to XPSXPS-compatible printers without the need for conversion to an intermediate format. Weitere Informationen zu Optionen und Funktionen der Druckpfadausgabe finden Sie unter Übersicht über das Drucken.See the Printing Overview for additional information on print path output options and capabilities.

Plug-In-SerialisierungsprogrammePlug-in Serializers

Die System.Windows.Documents.Serialization APIs bieten Unterstützung für Plug-In-Serialisierungsprogramme und verknüpfte Serialisierungsprogramme, die separat von der Anwendung installiert sind, zur Laufzeit binden und zugegriffen werden, indem die SerializerProvider Ermittlungsmechanismus.The System.Windows.Documents.Serialization APIs provide support for both plug-in serializers and linked serializers that are installed separately from the application, bind at run time, and are accessed by using the SerializerProvider discovery mechanism. Plug-In-Serialisierungsprogramme bieten mehr Vorteile hinsichtlich einfacher Bereitstellung und systemweiter Verwendung.Plug-in serializers offer enhanced benefits for ease of deployment and system-wide use. Verknüpfte Serialisierungsprogramme können auch für teilweise vertrauenswürdige Umgebungen wie z.B. XAML-Browseranwendungen (XAML browser applications; XBAPs)XAML browser applications (XBAPs) implementiert werden, in denen nicht auf Plug-In-Serialisierungsprogramme zugegriffen werden kann.Linked serializers can also be implemented for partial trust environments such as XAML-Browseranwendungen (XAML browser applications; XBAPs)XAML browser applications (XBAPs) where plug-in serializers are not accessible. Verknüpfte Serialisierungsprogramme, die auf einer abgeleiteten Implementierung der basieren die SerializerWriter -Klasse, kompiliert und verknüpft sind direkt in der Anwendung.Linked serializers, which are based on a derived implementation of the SerializerWriter class, are compiled and linked directly into the application. Plug-In-Serialisierungsprogramme und verknüpfte Serialisierungsprogramme verwenden identische öffentliche Methoden und Ereignisse. Daher können eine oder beide Arten von Serialisierungsprogrammen problemlos in der gleichen Anwendung verwendet werden.Both plug-in serializers and linked serializers operate through identical public methods and events which make it easy to use either or both types of serializers in the same application.

Plug-In-Serialisierungsprogramme helfen Anwendungsentwicklern durch die Möglichkeit zur Erweiterung bei neuen Speicherentwürfen und Dateiformaten, ohne dass sie bereits bei der Erstellung für jedes mögliche Format programmieren müssen.Plug-in serializers aid application developers by providing extensibility to new storage designs and file formats without having to code directly for every potential format at build time. Von Plug-In-Serialisierungsprogrammen profitieren auch Drittanbieterentwickler durch eine standardisierte Methode, barrierefrei Plug-Ins für benutzerdefinierte oder geschützte Dateiformate bereitzustellen, zu installieren und zu aktualisieren.Plug-in serializers also benefit third-party developers by providing a standardized means to deploy, install, and update system accessible plug-ins for custom or proprietary file formats.

Verwenden eines Plug-In-SerialisierungsprogrammsUsing a Plug-in Serializer

Plug-In-Serialisierungsprogramme sind einfach zu verwenden.Plug-in serializers are simple to use. Die SerializerProvider -Klasse listet ein SerializerDescriptor -Objekt für jedes plug-in auf dem System installiert.The SerializerProvider class enumerates a SerializerDescriptor object for each plug-in installed on the system. Die IsLoadable Eigenschaft filtert die installierten Plug-Ins auf Basis der aktuellen Konfiguration und stellt sicher, dass das Serialisierungsprogramm geladen und von der Anwendung verwendet werden kann.The IsLoadable property filters the installed plug-ins based on the current configuration and verifies that the serializer can be loaded and used by the application. Die SerializerDescriptor bietet auch andere Eigenschaften, z. B. DisplayName und DefaultFileExtension, die die Anwendung verwenden können, um den Benutzer bei der Auswahl ein Serialisierungsprogramm für ein verfügbares Ausgabeformat aufzufordern.The SerializerDescriptor also provides other properties, such as DisplayName and DefaultFileExtension, which the application can use to prompt the user in selecting a serializer for an available output format. Das Standard-Plug-In-Serialisierungsprogramm für XPSXPS ist .NET Framework.NET Framework, das immer aufgelistet wird.A default plug-in serializer for XPSXPS is provided with .NET Framework.NET Framework and is always enumerated. Nachdem der Benutzer wählt ein Ausgabeformat aus der CreateSerializerWriter Methode dient zum Erstellen einer SerializerWriter für das bestimmte Format.After the user selects an output format, the CreateSerializerWriter method is used to create a SerializerWriter for the specific format. Die SerializerWriter.Write Methode kann dann aufgerufen werden, um das Dokument mit dem Datenspeicher Ausgabestream.The SerializerWriter.Write method can then be called to output the document stream to the data store.

Das folgende Beispiel veranschaulicht eine Anwendung, verwendet die SerializerProvider Methode in einer "PlugInFileFilter"-Eigenschaft.The following example illustrates an application that uses the SerializerProvider method in a "PlugInFileFilter" property. PlugInFileFilter Listet die installierten Plug-Ins und erstellt eine Filterzeichenfolge mit den verfügbaren Optionen für eine SaveFileDialog.PlugInFileFilter enumerates the installed plug-ins and builds a filter string with the available file options for a SaveFileDialog.

// ------------------------ PlugInFileFilter --------------------------
/// <summary>
///   Gets a filter string for installed plug-in serializers.</summary>
/// <remark>
///   PlugInFileFilter is used to set the SaveFileDialog or
///   OpenFileDialog "Filter" property when saving or opening files
///   using plug-in serializers.</remark>
private string PlugInFileFilter
{
    get
    {   // Create a SerializerProvider for accessing plug-in serializers.
        SerializerProvider serializerProvider = new SerializerProvider();
        string filter = "";

        // For each loadable serializer, add its display
        // name and extension to the filter string.
        foreach (SerializerDescriptor serializerDescriptor in
            serializerProvider.InstalledSerializers)
        {
            if (serializerDescriptor.IsLoadable)
            {
                // After the first, separate entries with a "|".
                if (filter.Length > 0)   filter += "|";

                // Add an entry with the plug-in name and extension.
                filter += serializerDescriptor.DisplayName + " (*" +
                    serializerDescriptor.DefaultFileExtension + ")|*" +
                    serializerDescriptor.DefaultFileExtension;
            }
        }

        // Return the filter string of installed plug-in serializers.
        return filter;
    }
}

Nach Name der Ausgabedatei vom Benutzer ausgewählt wurde, wird das folgende Beispiel veranschaulicht die Verwendung von der CreateSerializerWriter Methode, um ein bestimmtes Dokument in einem angegebenen Format zu speichern.After an output file name has been selected by the user, the following example illustrates use of the CreateSerializerWriter method to store a given document in a specified format.

// Create a SerializerProvider for accessing plug-in serializers.
SerializerProvider serializerProvider = new SerializerProvider();

// Locate the serializer that matches the fileName extension.
SerializerDescriptor selectedPlugIn = null;
foreach ( SerializerDescriptor serializerDescriptor in
                serializerProvider.InstalledSerializers )
{
    if ( serializerDescriptor.IsLoadable &&
         fileName.EndsWith(serializerDescriptor.DefaultFileExtension) )
    {   // The plug-in serializer and fileName extensions match.
        selectedPlugIn = serializerDescriptor;
        break; // foreach
    }
}

// If a match for a plug-in serializer was found,
// use it to output and store the document.
if (selectedPlugIn != null)
{
    Stream package = File.Create(fileName);
    SerializerWriter serializerWriter =
        serializerProvider.CreateSerializerWriter(selectedPlugIn,
                                                  package);
    IDocumentPaginatorSource idoc =
        flowDocument as IDocumentPaginatorSource;
    serializerWriter.Write(idoc.DocumentPaginator, null);
    package.Close();
    return true;
}

Installieren von Plug-In-SerialisierungsprogrammenInstalling Plug-in Serializers

Die SerializerProvider Klasse bereitstellt, der oberen Ebene Anwendungsschnittstelle für Plug-In-Serialisierungsprogramm Ermittlung und Zugriff.The SerializerProvider class supplies the upper-level application interface for plug-in serializer discovery and access. SerializerProviderSucht und stellt der Anwendung eine Liste der Serialisierungsprogramme, die installiert und auf dem System zugänglich sind.SerializerProvider locates and provides the application a list of the serializers that are installed and accessible on the system. Die Einzelheiten der installierten Serialisierungsprogramme werden durch Registrierungseinstellungen definiert.The specifics of the installed serializers are defined through registry settings. Plug-In-Serialisierungsprogrammen zur Registrierung hinzugefügt werden können, mithilfe der RegisterSerializer Methode; oder wenn .NET Framework.NET Framework noch nicht installiert, kann der Plug-in-Installation-Skript direkt Satz der Registrierung Werte selbst.Plug-in serializers can be added to the registry by using the RegisterSerializer method; or if .NET Framework.NET Framework is not yet installed, the plug-in installation script can directly set the registry values itself. Die UnregisterSerializer Methode kann verwendet werden, um einen zuvor installierten entfernen-Plug-in, oder die registrierungseinstellungen können auf ähnliche Weise zurückgesetzt werden, indem ein Deinstallationsskript.The UnregisterSerializer method can be used to remove a previously installed plug-in, or the registry settings can be reset similarly by an uninstall script.

Erstellen eines Plug-In-SerialisierungsprogrammsCreating a Plug-in Serializer

Plug-In-Serialisierungsprogramme und verknüpfte Serialisierungsprogramme verwenden dieselben verfügbar gemachten, öffentlichen Methoden und Ereignisse und können daher so entworfen werden, dass sie synchron oder asynchron ausgeführt werden.Both plug-in serializers and linked serializers use the same exposed public methods and events, and similarly can be designed to operate either synchronously or asynchronously. Folgen Sie diesen drei grundlegenden Schritten zum Erstellen eines Plug-In-Serialisierungsprogramms:There are three basic steps normally followed to create a plug-in serializer:

  1. Implementieren und debuggen Sie das Serialisierungsprogramm zuerst als verknüpftes Serialisierungsprogramm.Implement and debug the serializer first as a linked serializer. Das vorherige Erstellen des Serialisierungsprogramms, das kompiliert und direkt mit der Testanwendung verknüpft wird, ermöglicht vollen Zugriff auf Haltepunkte und weitere für den Test nützliche Debugdienste.Initially creating the serializer compiled and linked directly in a test application provides full access to breakpoints and other debug services helpful for testing.

  2. Nachdem das Serialisierungsprogramm nicht vollständig getestet wird, eine ISerializerFactory -Schnittstelle wird hinzugefügt, um ein plug-in zu erstellen.After the serializer is fully tested, an ISerializerFactory interface is added to create a plug-in. Die ISerializerFactory -Schnittstelle erlaubt den Zugriff auf alle .NET Framework.NET Framework -Objekte, die in der logischen Struktur umfasst UIElement Objekte IDocumentPaginatorSource, und Visual Elemente.The ISerializerFactory interface permits full access to all .NET Framework.NET Framework objects which includes the logical tree, UIElement objects, IDocumentPaginatorSource, and Visual elements. Darüber hinaus ISerializerFactory bietet die gleichen synchrone und asynchrone Methoden und Ereignisse, die von verknüpften Serialisierungsprogrammen verwendet.Additionally ISerializerFactory provides the same synchronous and asynchronous methods and events used by linked serializers. Da die Ausgabe großer Dokumente mehr Zeit in Anspruch nehmen kann, sind asynchrone Vorgänge empfehlenswert, um eine reaktionsfähige Benutzerinteraktion und eine Abbrechen-Option zu gewährleisten, falls ein Problem mit dem Datenspeicher auftreten sollte.Since large documents can take time to output, asynchronous operations are recommended to maintain responsive user interaction and offer a "Cancel" option if some problem occurs with the data store.

  3. Nach Erstellen des Plug-In-Serialisierungsprogramms wird ein Installationsskript für die Verteilung und Installation (und Deinstallation) des Plug-Ins implementiert (siehe oben unter „Installieren von Plug-In-Serialisierungsprogrammen“).After the plug-in serializer is created, an installation script is implemented for distributing and installing (and uninstalling) the plug-in (see above, "Installing Plug-in Serializers").

Siehe auchSee Also

System.Windows.Documents.Serialization
XpsDocumentWriter
XpsDocument
Dokumente in WPFDocuments in WPF
Übersicht über das DruckenPrinting Overview
Übersicht über XML Paper SpecificationXML Paper Specification: Overview