Bagikan melalui


Serialisasi dan Penyimpanan Dokumen

Microsoft .NET Framework menyediakan lingkungan yang kuat untuk membuat dan menampilkan dokumen berkualitas tinggi. Fitur yang ditingkatkan yang mendukung dokumen tetap dan dokumen alur, kontrol tampilan tingkat lanjut, dikombinasikan dengan kemampuan grafis 2D dan 3D yang kuat membawa aplikasi .NET Framework ke tingkat kualitas dan pengalaman pengguna yang baru. Mampu mengelola representasi dalam memori dokumen secara fleksibel adalah fitur utama .NET Framework, dan dapat menyimpan dan memuat dokumen secara efisien dari penyimpanan data adalah kebutuhan hampir setiap aplikasi. Proses konversi dokumen dari representasi internal dalam memori ke penyimpanan data eksternal disebut serialisasi. Proses terbalik membaca penyimpanan data dan membuat ulang instans dalam memori asli disebut deserialisasi.

Tentang Serialisasi Dokumen

Idealnya proses serialisasi dan deserialisasi dokumen dari dan kemudian kembali ke memori transparan ke aplikasi. Aplikasi memanggil metode "tulis" serializer untuk menyimpan dokumen, sementara metode deserializer "baca" mengakses penyimpanan data dan membuat ulang instans asli dalam memori. Format spesifik tempat data disimpan umumnya tidak menjadi perhatian aplikasi selama proses serialisasi dan deserialisasi membuat ulang dokumen kembali ke bentuk aslinya.

Aplikasi sering menyediakan beberapa opsi serialisasi yang memungkinkan pengguna menyimpan dokumen ke media yang berbeda atau ke format yang berbeda. Misalnya, aplikasi mungkin menawarkan opsi "Simpan Sebagai" untuk menyimpan dokumen ke file disk, database, atau layanan web. Demikian pula, serializer yang berbeda dapat menyimpan dokumen dalam format yang berbeda seperti dalam HTML, RTF, XML, XPS, atau secara bergantian ke format pihak ketiga. Untuk aplikasi, serialisasi mendefinisikan antarmuka yang mengisolasi detail media penyimpanan dalam implementasi setiap serializer tertentu. Selain manfaat merangkum detail penyimpanan, API .NET Framework System.Windows.Documents.Serialization menyediakan beberapa fitur penting lainnya.

Fitur Serializer Dokumen .NET Framework 3.0

  • Akses langsung ke objek dokumen tingkat tinggi (pohon logis dan visual) memungkinkan penyimpanan konten paginated yang efisien, elemen 2D/3D, gambar, media, hyperlink, anotasi, dan konten dukungan lainnya.

  • Operasi sinkron dan asinkron.

  • Dukungan untuk serializer plug-in dengan kemampuan yang ditingkatkan:

    • Akses di seluruh sistem untuk digunakan oleh semua aplikasi .NET Framework.

    • Kemudahan penemuan plug-in aplikasi sederhana.

    • Penyebaran, penginstalan, dan pembaruan sederhana untuk plug-in pihak ketiga kustom.

    • Dukungan antarmuka pengguna untuk pengaturan dan opsi run-time kustom.

Jalur Cetak XPS

Jalur cetak Microsoft .NET Framework XPS juga menyediakan mekanisme yang dapat diperluas untuk menulis dokumen melalui output cetak. XPS berfungsi sebagai format file dokumen dan merupakan format spool cetak asli untuk Windows Vista. Dokumen XPS dapat dikirim langsung ke printer yang kompatibel dengan XPS tanpa perlu konversi ke format menengah. Lihat Gambaran Umum Pencetakan untuk informasi tambahan tentang opsi dan kemampuan output jalur cetak.

Serializer Plug-in

System.Windows.Documents.Serialization API menyediakan dukungan untuk serializer plug-in dan serializer tertaut yang diinstal secara terpisah dari aplikasi, mengikat pada waktu proses, dan diakses dengan menggunakan SerializerProvider mekanisme penemuan. Serializer plug-in menawarkan manfaat yang ditingkatkan untuk kemudahan penyebaran dan penggunaan di seluruh sistem. Serializer tertaut juga dapat diimplementasikan untuk lingkungan kepercayaan parsial seperti aplikasi browser XAML (XBAP) di mana serializer plug-in tidak dapat diakses. Serializer tertaut, yang didasarkan pada implementasi turunan SerializerWriter kelas, dikompilasi dan ditautkan langsung ke dalam aplikasi. Serializer plug-in dan serializer tertaut beroperasi melalui metode publik dan peristiwa yang identik yang memudahkan penggunaan salah satu atau kedua jenis serializer dalam aplikasi yang sama.

Serializer plug-in membantu pengembang aplikasi dengan memberikan ekstensibilitas ke desain penyimpanan baru dan format file tanpa harus mengodekan secara langsung untuk setiap format potensial pada waktu build. Serializer plug-in juga menguntungkan pengembang pihak ketiga dengan menyediakan cara standar untuk menyebarkan, menginstal, dan memperbarui plug-in yang dapat diakses sistem untuk format file kustom atau kepemilikan.

Menggunakan Plug-in Serializer

Serializer plug-in mudah digunakan. Kelas SerializerProvider menghitung SerializerDescriptor objek untuk setiap plug-in yang diinstal pada sistem. Properti IsLoadable memfilter plug-in yang diinstal berdasarkan konfigurasi saat ini dan memverifikasi bahwa serializer dapat dimuat dan digunakan oleh aplikasi. juga SerializerDescriptor menyediakan properti lain, seperti DisplayName dan DefaultFileExtension, yang dapat digunakan aplikasi untuk meminta pengguna dalam memilih serializer untuk format output yang tersedia. Serializer plug-in default untuk XPS disediakan dengan .NET Framework dan selalu dijumlahkan. Setelah pengguna memilih format output, CreateSerializerWriter metode digunakan untuk membuat SerializerWriter untuk format tertentu. Metode SerializerWriter.Write kemudian dapat dipanggil untuk menghasilkan aliran dokumen ke penyimpanan data.

Contoh berikut mengilustrasikan aplikasi yang menggunakan SerializerProvider metode dalam properti "PlugInFileFilter". PlugInFileFilter menghitung plug-in yang diinstal dan membangun string filter dengan opsi file yang SaveFileDialogtersedia untuk .

// ------------------------ 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;
    }
}

Setelah nama file output dipilih oleh pengguna, contoh berikut mengilustrasikan penggunaan CreateSerializerWriter metode untuk menyimpan dokumen tertentu dalam format tertentu.

// 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;
}

Menginstal Serializer Plug-in

Kelas ini SerializerProvider menyediakan antarmuka aplikasi tingkat atas untuk penemuan dan akses serializer plug-in. SerializerProvider menemukan dan menyediakan aplikasi daftar serializer yang diinstal dan dapat diakses pada sistem. Spesifikasi serializer yang diinstal didefinisikan melalui pengaturan registri. Serializer plug-in dapat ditambahkan ke registri dengan menggunakan RegisterSerializer metode ; atau jika .NET Framework belum diinstal, skrip penginstalan plug-in dapat langsung mengatur nilai registri itu sendiri. Metode UnregisterSerializer ini dapat digunakan untuk menghapus plug-in yang diinstal sebelumnya, atau pengaturan registri dapat direset serupa dengan skrip penghapusan instalasi.

Membuat Serializer Plug-in

Serializer plug-in dan serializer tertaut menggunakan metode dan peristiwa publik yang diekspos yang sama, dan juga dapat dirancang untuk beroperasi baik secara sinkron atau asinkron. Ada tiga langkah dasar yang biasanya diikuti untuk membuat serializer plug-in:

  1. Terapkan dan debug serializer terlebih dahulu sebagai serializer tertaut. Awalnya membuat serializer yang dikompilasi dan ditautkan langsung dalam aplikasi pengujian menyediakan akses penuh ke titik henti dan layanan debug lainnya yang berguna untuk pengujian.

  2. Setelah serializer diuji sepenuhnya, ISerializerFactory antarmuka ditambahkan untuk membuat plug-in. Antarmuka ISerializerFactory mengizinkan akses penuh ke semua objek .NET Framework yang mencakup pohon logis, UIElement objek, IDocumentPaginatorSource, dan Visual elemen. ISerializerFactory Selain itu menyediakan metode dan peristiwa sinkron dan asinkron yang sama yang digunakan oleh serializer tertaut. Karena dokumen besar dapat memakan waktu untuk output, operasi asinkron disarankan untuk mempertahankan interaksi pengguna yang responsif dan menawarkan opsi "Batal" jika beberapa masalah terjadi dengan penyimpanan data.

  3. Setelah serializer plug-in dibuat, skrip penginstalan diimplementasikan untuk mendistribusikan dan menginstal (dan menghapus instalasi) plug-in (lihat di atas, "Menginstal Serializer Plug-in").

Baca juga