Belge Serileştirme ve Depolama

Microsoft .NET Framework, yüksek kaliteli belgeler oluşturmak ve görüntülemek için güçlü bir ortam sağlar. Hem sabit belgeleri hem de akış belgelerini destekleyen gelişmiş özellikler, gelişmiş görüntüleme denetimleri, güçlü 2B ve 3B grafik özellikleriyle birlikte .NET Framework uygulamalarını yeni bir kalite ve kullanıcı deneyimi düzeyine taşır. Bir belgenin bellek içi gösterimini esnek bir şekilde yönetebilmek .NET Framework'ün önemli bir özelliğidir ve bir veri deposundan belgeleri verimli bir şekilde kaydedip yükleyebilmek neredeyse her uygulamaya ihtiyaç duyar. Bir belgeyi iç bellek içi gösterimden dış veri deposuna dönüştürme işlemi serileştirme olarak kabul edilir. Veri depolarını okumanın ve özgün bellek içi örneğini yeniden oluşturmanın ters işlemi seri durumdan çıkarma olarak adlandırılır.

Belge Serileştirme hakkında

İdeal olarak, bir belgeyi seri hale getirme ve seri durumdan çıkarma ve ardından belleğe geri dönme işlemi uygulama için saydamdır. Uygulama belgeyi kaydetmek için seri hale getirici "yazma" yöntemini çağırırken, seri durumdan çıkarıcı "okuma" yöntemi veri deposuna erişir ve özgün örneği bellekte yeniden oluşturur. Verilerin depolandığı belirli biçim, seri hale getirme ve seri durumdan çıkarma işlemi belgeyi özgün biçimine geri döndürdiği sürece genellikle uygulamayla ilgili değildir.

Uygulamalar genellikle kullanıcının belgeleri farklı bir ortama veya farklı bir biçime kaydetmesine olanak tanıyan birden çok serileştirme seçeneği sağlar. Örneğin, bir uygulama bir belgeyi disk dosyasına, veritabanına veya web hizmetine depolamak için "Farklı Kaydet" seçenekleri sunabilir. Benzer şekilde, farklı serileştiriciler belgeyi HTML, RTF, XML, XPS gibi farklı biçimlerde veya alternatif olarak üçüncü taraf biçiminde depolayabilir. Uygulama için serileştirme, her bir seri hale getiricinin uygulanması içinde depolama ortamı ayrıntılarını yalıtan bir arabirim tanımlar. Depolama ayrıntılarını kapsüllemenin avantajlarına ek olarak, .NET Framework System.Windows.Documents.Serialization API'leri diğer birçok önemli özellik sağlar.

.NET Framework 3.0 Belge SeriLeştiricilerinin Özellikleri

  • Üst düzey belge nesnelerine (mantıksal ağaç ve görseller) doğrudan erişim, sayfalandırılmış içeriğin, 2B/3B öğelerin, görüntülerin, medyanın, köprülerin, ek açıklamaların ve diğer destek içeriğinin verimli bir şekilde depolanmasını sağlar.

  • Zaman uyumlu ve zaman uyumsuz işlem.

  • Gelişmiş özelliklere sahip eklenti serileştiricileri desteği:

    • Tüm .NET Framework uygulamaları tarafından kullanılmak üzere sistem genelinde erişim.

    • Basit uygulama eklentisi bulunabilirliği.

    • Özel üçüncü taraf eklentileri için basit dağıtım, yükleme ve güncelleştirme.

    • Özel çalışma zamanı ayarları ve seçenekleri için kullanıcı arabirimi desteği.

XPS Yazdırma Yolu

Microsoft .NET Framework XPS yazdırma yolu, yazdırma çıktısı aracılığıyla belge yazmak için genişletilebilir bir mekanizma da sağlar. XPS hem belge dosyası biçimi olarak görev alır hem de Windows Vista için yerel yazdırma biriktiricisi biçimidir. XPS belgeleri, ara biçime dönüştürmeye gerek kalmadan doğrudan XPS uyumlu yazıcılara gönderilebilir. Yazdırma yolu çıktı seçenekleri ve özellikleri hakkında ek bilgi için bkz. Yazdırmaya Genel Bakış.

Eklenti Serileştiricileri

API'ler System.Windows.Documents.Serialization , uygulamadan ayrı olarak yüklenen, çalışma zamanında bağlanan ve bulma mekanizması kullanılarak SerializerProvider erişilen eklenti serileştiricileri ve bağlı serileştiriciler için destek sağlar. Eklenti serileştiricileri, dağıtım kolaylığı ve sistem genelinde kullanım için gelişmiş avantajlar sunar. Bağlı serileştiriciler, eklenti serileştiricilerinin erişilebilir olmadığı XAML tarayıcı uygulamaları (XBAP' ler) gibi kısmi güven ortamları için de uygulanabilir. Sınıfının türetilmiş bir uygulamasını SerializerWriter temel alan bağlı serileştiriciler derlenir ve doğrudan uygulamaya bağlanır. Hem eklenti seri hale getiricileri hem de bağlı serileştiriciler aynı ortak yöntemler ve olaylar aracılığıyla çalışır ve bu da aynı uygulamada seri hale getirici türlerinden birini veya her ikisini de kullanmayı kolaylaştırır.

Eklenti serileştiricileri, derleme zamanındaki her olası biçim için doğrudan kod oluşturmak zorunda kalmadan yeni depolama tasarımlarına ve dosya biçimlerine genişletilebilirlik sağlayarak uygulama geliştiricilerine yardımcı olur. Eklenti serileştiricileri, özel veya özel dosya biçimleri için sistem tarafından erişilebilen eklentileri dağıtmak, yüklemek ve güncelleştirmek için standartlaştırılmış bir araç sağlayarak üçüncü taraf geliştiricilere de avantaj sağlar.

Eklenti Seri Hale Getirici kullanma

Eklenti serileştiricilerinin kullanımı kolaydır. sınıfı, SerializerProvider sistemde yüklü her eklenti için bir SerializerDescriptor nesne numaralandırır. özelliği, IsLoadable yüklü eklentileri geçerli yapılandırmaya göre filtreler ve seri hale getiricinin uygulama tarafından yüklenip kullanılabileceğini doğrular. ayrıcaSerializerDescriptor, uygulamanın kullanılabilir bir çıkış biçimi için bir seri hale getirici seçmesi için kullanıcıdan bilgi almak için kullanabileceği ve DefaultFileExtensiongibi DisplayName diğer özellikleri de sağlar. XPS için varsayılan bir eklenti seri hale getirici .NET Framework ile sağlanır ve her zaman numaralandırılır. Kullanıcı bir çıkış biçimi seçtikten sonra, CreateSerializerWriter yöntemi belirli bir biçim için bir SerializerWriter oluşturmak için kullanılır. Daha SerializerWriter.Write sonra veri deposuna belge akışının çıktısını almak için yöntemi çağrılabilir.

Aşağıdaki örnekte, "PlugInFileFilter" özelliğinde yöntemini kullanan SerializerProvider bir uygulama gösterilmektedir. PlugInFileFilter, yüklü eklentileri numaralandırır ve için kullanılabilir dosya seçenekleriyle bir SaveFileDialogfiltre dizesi oluşturur.

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

Kullanıcı tarafından bir çıkış dosyası adı seçildikten sonra, aşağıdaki örnekte belirtilen bir belgeyi CreateSerializerWriter belirtilen biçimde depolamak için yönteminin kullanımı gösterilmektedir.

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

Eklenti SeriLeştiricilerini Yükleme

SerializerProvider sınıfı, eklenti seri hale getirici bulma ve erişim için üst düzey uygulama arabirimi sağlar. SerializerProvider sistemde yüklü ve erişilebilir seri hale getiricilerin listesini bulur ve uygulamaya sağlar. Yüklü serileştiricilerin özellikleri kayıt defteri ayarları aracılığıyla tanımlanır. Eklenti serileştiricileri yöntemi kullanılarak RegisterSerializer kayıt defterine eklenebilir veya .NET Framework henüz yüklenmemişse, eklenti yükleme betiği doğrudan kayıt defteri değerlerinin kendisini ayarlayabilir. UnregisterSerializer yöntemi, önceden yüklenmiş bir eklentiyi kaldırmak için kullanılabilir veya kayıt defteri ayarları bir kaldırma betiği tarafından benzer şekilde sıfırlanabilir.

Eklenti Seri Hale Getirici Oluşturma

Hem eklenti seri hale getiricileri hem de bağlı seri hale getiriciler aynı genel yöntemleri ve olayları kullanır ve benzer şekilde zaman uyumlu veya zaman uyumsuz olarak çalışacak şekilde tasarlanabilir. Eklenti seri hale getiricisi oluşturmak için normalde izlenen üç temel adım vardır:

  1. Seri hale getiriciyi ilk olarak bağlı seri hale getirici olarak uygulayın ve hatalarını ayıklar. Başlangıçta doğrudan bir test uygulamasında derlenen ve bağlanan seri hale getiricinin oluşturulması, kesme noktalarına ve test için yararlı olan diğer hata ayıklama hizmetlerine tam erişim sağlar.

  2. Seri hale getirici tam olarak test edildikten sonra, eklenti oluşturmak için bir ISerializerFactory arabirim eklenir. Arabirim, ISerializerFactory mantıksal ağacı, UIElement nesneleri IDocumentPaginatorSourceve Visual öğeleri içeren tüm .NET Framework nesnelerine tam erişime izin verir. ISerializerFactory Ayrıca, bağlı seri hale getiriciler tarafından kullanılan aynı zaman uyumlu ve zaman uyumsuz yöntemleri ve olayları sağlar. Büyük belgelerin çıkışı zaman alabileceğinden, zaman uyumsuz işlemlerin yanıt veren kullanıcı etkileşimini sürdürmesi ve veri deposunda bir sorun oluşması durumunda "İptal et" seçeneği sunulabilmesi önerilir.

  3. Eklenti serileştiricisi oluşturulduktan sonra, eklentiyi dağıtmak ve yüklemek (ve kaldırmak) için bir yükleme betiği uygulanır (yukarıya bakın, "Eklenti SeriLeştiricilerini Yükleme").

Ayrıca bkz.