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, güçlü 2b ve 3b grafik özellikleriyle birleştirilmiş gelişmiş görüntüleme denetimleri, .NET Framework uygulamaları yeni bir kalite ve kullanıcı deneyimi düzeyine götürür. bir belgenin bellek içi gösterimini esnek bir şekilde yönetebilmek, .NET Framework temel bir özelliktir ve bir veri deposundan belgeleri verimli bir şekilde kaydedip yükleyebilmekte olan neredeyse her uygulamanın bir ihtiyacı vardır. Bir belgeyi dahili bir bellek içi gösterimden dış veri deposuna dönüştürme işlemi serileştirme olarak adlandırılır. Bir veri deposunu okumayı ve özgün bellek içi örneği yeniden oluşturmayı yeniden oluşturma işlemi, seri durumdan çıkarma işlemini geri adlandırılmış hale getirilir.

Belge serileştirme hakkında

İdeal olarak, bir belgeyi serileştirmek ve seri durumdan çıkarmak ve sonra da uygulamaya geri dönmek için idealdir. Uygulama, seri hale getirici "okuma" yöntemi veri deposuna eriştiğinde ve özgün örneği bellekte yeniden oluşturur. Verilerin depolandığı belirli biçim genellikle serileştirme ve seri durumdan çıkarma işlemi belgeyi özgün biçimine geri oluşturursa uygulamanın bir sorunu değildir.

Uygulamalar genellikle kullanıcının belgeleri farklı bir ortama veya farklı bir biçime kaydetmesine izin veren birden çok serileştirme seçeneği sağlar. Örneğin, bir uygulama bir belgeyi disk dosyasında, veritabanında veya Web hizmetinde depolamak için "farklı kaydet" seçeneğini sunabilir. Benzer şekilde, farklı serileştiriciler belgeyi HTML, RTF, XML, XPS gibi farklı biçimlerde veya alternatif olarak üçüncü taraf bir biçimde saklayabilir. Seri hale getirme, her belirli bir seri hale getiricinin uygulamasındaki depolama ortamının ayrıntılarını yalıtan bir arabirim tanımlar. depolama ayrıntılarının kapsüllenmesi avantajlarına ek olarak .NET Framework System.Windows.Documents.Serialization apı 'leri, diğer birçok önemli özelliği de 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ş özelliklerde Eklenti serileştiricileri desteği:

    • tüm .NET Framework uygulamalar tarafından kullanım için 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 ayrıca, yazdırma çıktısı aracılığıyla belge yazmak için genişletilebilir bir mekanizma sağlar. XPS, hem belge dosyası biçimi hem de Windows Vista için yerel yazdırma biriktirme biçimidir. XPS belgeleri, bir ara biçime dönüştürmeye gerek olmadan doğrudan XPS uyumlu yazıcılara gönderilebilir. Yazdırma yolu çıkış seçenekleri ve özellikleri hakkında daha fazla bilgi için bkz. yazdırmayla Ilgili genel bakış .

Eklenti serileştiricileri

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

Eklenti serileştiricileri, derleme zamanında her olası biçim için doğrudan kod oluşturmaya gerek 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şilebilir eklentileri dağıtmak, yüklemek ve güncelleştirmek için standartlaştırılmış bir yol sunarak üçüncü taraf geliştiricilere de yararlanır.

Eklenti serileştirici kullanma

Eklenti serileştiricileri kullanımı basittir. SerializerProviderSınıfı, SerializerDescriptor sistemde yüklü olan her eklenti için bir nesneyi numaralandırır. IsLoadableÖzelliği, geçerli yapılandırmaya bağlı olarak yüklenen eklentileri filtreler ve seri hale getiricinin uygulama tarafından yüklenip kullanılabileceğini doğrular. , SerializerDescriptor Ve gibi diğer özellikleri de sağlar DisplayNameDefaultFileExtension . Bu, uygulamanın, kullanıcının kullanılabilir çıkış biçimi için bir serileştirici seçmesini istemek için kullanabileceği. XPS için varsayılan bir eklenti serileştirici .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 oluşturmak üzere kullanılır SerializerWriter . SerializerWriter.WriteDaha sonra yöntemi belge akışını veri deposuna çıkarmak için çağrılabilir.

Aşağıdaki örnek, SerializerProvider "PlugInFileFilter" özelliğindeki yöntemi kullanan bir uygulamayı gösterir. PlugInFileFilter yüklü eklentileri numaralandırır ve için kullanılabilir dosya seçenekleriyle bir filtre dizesi oluşturur 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;
    }
}

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

// 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ştiricileri yükleniyor

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

Eklenti serileştirici oluşturma

Hem Eklenti serileştiricileri hem de bağlantılı serileştiriciler aynı açık ortak yöntemleri ve olayları kullanır ve benzer şekilde, eş zamanlı veya zaman uyumsuz olarak çalışacak şekilde tasarlanabilir. Genellikle bir eklenti serileştirici oluşturmak için üç temel adım vardır:

  1. Önce serileştiriciyi bir bağlı seri hale getirici olarak uygulayın ve hata ayıklayın. Başlangıçta derlenerek derlenen ve doğrudan bir test uygulamasında bağlanan seri hale getirici oluşturulması, kesme noktalarına ve diğer hata ayıklama hizmetlerine tam erişim sağlayarak test edilmesine yardımcı olur.

  2. Serileştirici tamamen test edildikten sonra ISerializerFactory eklenti oluşturmak için bir arabirim eklenir. ISerializerFactoryarabirim, mantıksal ağacı, UIElement nesneleri, IDocumentPaginatorSource ve öğelerini içeren tüm .NET Framework nesnelerine tam erişim sağlar Visual . Ayrıca ISerializerFactory , bağlı serileştiriciler tarafından kullanılan aynı zaman uyumlu ve zaman uyumsuz yöntemleri ve olayları sağlar. Büyük belgeler çıkışa zaman götürebileceği için, yanıt veren kullanıcı etkileşimini sürdürmek için zaman uyumsuz işlemler önerilir ve veri deposuyla ilgili bir sorun oluşursa bir "Iptal" seçeneği sunar.

  3. Eklenti serileştirici oluşturulduktan sonra, eklentinin dağıtılması ve yüklenmesi (ve kaldırılması) için bir yükleme betiği uygulanır (bkz. yukarıdaki "Eklenti serileştiricileri yükleme").

Ayrıca bkz.