Megosztás a következőn keresztül:


Dokumentum szerializálása és tárolása

A Microsoft .NET-keretrendszer hatékony környezetet biztosít a kiváló minőségű dokumentumok létrehozásához és megjelenítéséhez. A rögzített dokumentumokat és a folyamatdokumentumokat egyaránt támogató továbbfejlesztett funkciók, a fejlett megtekintési vezérlők és a hatékony 2D és 3D grafikus funkciók a .NET-keretrendszer alkalmazásait új szintre emelik a minőség és a felhasználói élmény terén. A .NET-keretrendszer kulcsfontosságú funkciója, hogy rugalmasan felügyelhető legyen egy dokumentum memórián belüli ábrázolása, és szinte minden alkalmazásnak szüksége van arra, hogy hatékonyan menthesse és betölthesse a dokumentumokat egy adattárból. A dokumentum belső memóriabeli ábrázolásból külső adattárba való konvertálásának folyamatát szerializálásnak nevezzük. Az adattár olvasásának és az eredeti memóriabeli példány újrafordításának fordított folyamata a deszerializálás.

Tudnivalók a dokumentum szerializálásáról

Ideális esetben a dokumentum szerializálásának és deszerializálásának folyamata a memóriából, majd vissza a memóriába transzparens az alkalmazás számára. Az alkalmazás egy szerializáló "írási" metódust hív meg a dokumentum mentéséhez, míg egy deszerializáló "olvasási" metódus hozzáfér az adattárhoz, és újra létrehozza az eredeti példányt a memóriában. Az adatok meghatározott formátuma általában nem érinti az alkalmazást, amíg a szerializálási és deszerializálási folyamat újra létrehozza a dokumentumot az eredeti formájában.

Az alkalmazások gyakran több szerializálási lehetőséget is biztosítanak, amelyek lehetővé teszik, hogy a felhasználó különböző adathordozóra vagy más formátumba mentse a dokumentumokat. Előfordulhat például, hogy egy alkalmazás "Mentés másként" lehetőséget kínál egy dokumentum lemezfájlba, adatbázisba vagy webszolgáltatásba való tárolására. Hasonlóképpen, a különböző szerializálók különböző formátumokban, például HTML, RTF, XML, XPS formátumban vagy más külső formátumokban is tárolhatják a dokumentumot. Az alkalmazás számára a szerializálás egy olyan felületet határoz meg, amely elkülöníti a tárolóeszköz részleteit az egyes szerializálók implementálásán belül. A tárolási adatok beágyazásának előnyei mellett a .NET-keretrendszer System.Windows.Documents.Serialization API-k számos egyéb fontos funkciót is biztosítanak.

A .NET-keretrendszer 3.0-s dokumentumszerializálóinak funkciói

  • A magas szintű dokumentumobjektumokhoz (logikai fához és vizualizációkhoz) való közvetlen hozzáférés lehetővé teszi a lapszámozott tartalom, a 2D/3D elemek, képek, médiatartalmak, hivatkozások, széljegyzetek és egyéb támogatási tartalmak hatékony tárolását.

  • Szinkron és aszinkron művelet.

  • Továbbfejlesztett képességekkel rendelkező beépülő modulszerializálók támogatása:

    • Rendszerszintű hozzáférés az összes .NET-keretrendszer-alkalmazás számára.

    • Egyszerű alkalmazás beépülő modul felderíthetősége.

    • Egyszerű üzembe helyezés, telepítés és frissítés egyéni külső beépülő modulokhoz.

    • A felhasználói felület támogatást nyújt az egyéni futásidejű beállításokhoz és opciókhoz.

XPS nyomtatási útvonal

A Microsoft .NET Framework XPS nyomtatási útvonala bővíthető mechanizmust is biztosít a dokumentumok nyomtatáson keresztüli írásához. Az XPS egyaránt használható dokumentumfájl-formátumként, és a Windows Vista natív nyomtatásisor-formátuma. Az XPS-dokumentumok közvetlenül XPS-kompatibilis nyomtatókra küldhetők anélkül, hogy köztes formátumra kellene konvertálni őket. További információkért a nyomtatási útvonal kimeneti lehetőségeiről és képességeiről tekintse meg a Nyomtatási áttekintő.

Beépülő modul szerializálók

A System.Windows.Documents.Serialization API-k támogatást nyújtanak mind a beépülő modul szerializálók, mind a csatolt szerializálók számára, amelyek az alkalmazástól külön vannak telepítve, futásidőben kötnek, és amelyek a SerializerProvider felderítési mechanizmussal érhetők el. A beépülő modul szerializálók továbbfejlesztett előnyöket kínálnak a könnyű üzembe helyezés és a rendszerszintű használat érdekében. A csatolt szerializálók olyan részleges megbízhatósági környezetekben is implementálhatók, mint például az XAML böngészőalkalmazások (XBAP-k), ahol a beépülő modul szerializálói nem érhetők el. A csatolt szerializálók, amelyek a SerializerWriter osztály származtatott implementációján alapulnak, közvetlenül az alkalmazásba vannak lefordítva és összekapcsolva. A beépülő szerializálók és a csatolt szerializálók azonos nyilvános módszerekkel és eseményekkel működnek, amelyek megkönnyítik a szerializálók vagy mindkét típus használatát ugyanabban az alkalmazásban.

A beépülő modulok szerializálói úgy segítik az alkalmazásfejlesztőket, hogy bővítési lehetőséget biztosítanak új tárolási tervekhez és fájlformátumokhoz anélkül, hogy közvetlenül kellene kódolniuk minden lehetséges formátumhoz a build időpontjában. A beépülő modulok szerializálói a külső fejlesztők számára is hasznosak lehetnek azáltal, hogy szabványosított eszközöket biztosítanak a rendszer által elérhető beépülő modulok egyéni vagy védett fájlformátumokhoz való telepítéséhez, telepítéséhez és frissítéséhez.

Beépülő modul szerializátor használata

A plug-in szerializálók használata egyszerű. A SerializerProvider osztály egy SerializerDescriptor objektumot sorol fel a rendszerre telepített összes beépülő modulhoz. A IsLoadable tulajdonság az aktuális konfiguráció alapján szűri a telepített beépülő modulokat, és ellenőrzi, hogy a szerializáló betölthető-e és használható-e az alkalmazás. A SerializerDescriptor egyéb tulajdonságokat is biztosít, például DisplayName és DefaultFileExtension, amelyekkel az alkalmazás megkérheti a felhasználót, hogy válasszon szerializálót egy elérhető kimeneti formátumhoz. Az .NET-keretrendszer tartalmaz egy alapértelmezett beépülőmodul-szerializálót az XPS-hez, amelyet mindig enumerálnak. Miután a felhasználó kiválasztott egy kimeneti formátumot, a CreateSerializerWriter metódussal létrehoz egy SerializerWriter az adott formátumhoz. Ezután meghívható a SerializerWriter.Write metódus, amely a dokumentumstreamet az adattárba adhatja ki.

Az alábbi példa egy olyan alkalmazást mutat be, amely a SerializerProvider metódust használja a "PlugInFileFilter" tulajdonságban. A PlugInFileFilter felsorolja a telepített beépülő modulokat, és létrehoz egy szűrősztringet a SaveFileDialogelérhető fájlbeállításaival.

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

Miután a felhasználó kiválasztotta a kimeneti fájl nevét, az alábbi példa a CreateSerializerWriter metódus használatát mutatja be egy adott dokumentum meghatározott formátumban való tárolásához.

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

Beépülő modul szerializálók telepítése

A SerializerProvider osztály biztosítja a beépülő modul szerializáló felderítéséhez és eléréséhez szükséges felső szintű alkalmazásfelületet. SerializerProvider megkeresi és megadja az alkalmazásnak a rendszeren telepített és elérhető szerializálók listáját. A telepített szerializálók jellemzői a beállításjegyzék beállításain keresztül vannak meghatározva. A beépülő modul szerializálók a RegisterSerializer metódussal vehetők fel a beállításjegyzékbe; vagy ha a .NET-keretrendszer még nincs telepítve, a beépülő modul telepítési szkriptje közvetlenül beállíthatja magát a beállításjegyzék-értékeket. A UnregisterSerializer metódussal eltávolíthat egy korábban telepített beépülő modult, vagy a beállításjegyzék beállításai hasonlóan visszaállíthatók egy eltávolítási szkripttel.

Beépülő modul szerializáló létrehozása

A beépülő modul szerializálók és a csatolt szerializálók is ugyanazokat a nyilvános metódusokat és eseményeket használják, és hasonlóképpen úgy is tervezhetők, hogy szinkron vagy aszinkron módon működjenek. A beépülő modul szerializáló létrehozásához általában három alapvető lépést kell követni:

  1. Először implementálja és hibakeresse a szerializálót, mint egy kapcsolt szerializálót. A közvetlenül a tesztalkalmazásban lefordított és csatolt szerializáló kezdetben teljes hozzáférést biztosít a töréspontokhoz és a teszteléshez hasznos egyéb hibakeresési szolgáltatásokhoz.

  2. A szerializáló teljes tesztelése után egy ISerializerFactory felület lesz hozzáadva egy beépülő modul létrehozásához. A ISerializerFactory felület teljes hozzáférést biztosít az összes .NET-keretrendszer-objektumhoz, beleértve a logikai fát, UIElement objektumokat, IDocumentPaginatorSourceés Visual elemeket. Emellett ISerializerFactory ugyanazokat a szinkron és aszinkron metódusokat és eseményeket biztosítja, amelyeket a csatolt szerializálók használnak. Mivel a nagyméretű dokumentumok kimenete időt vehet igénybe, az aszinkron műveletek ajánlottak a válaszkész felhasználói interakciók fenntartása érdekében, valamint hogy a felhasználók számára elérhetővé tegyük a "Mégse" lehetőséget, ha valamilyen probléma merül fel az adattárral.

  3. A beépülő modul szerializálójának létrehozása után egy telepítési szkript lesz implementálva a beépülő modul terjesztésére és telepítésére (és eltávolítására(lásd fent, "Beépülő modul szerializálók telepítése").

Lásd még