Programování

Jak pracovat se serializací v .Net

Při práci s aplikacemi budete často muset ukládat data na trvalé nebo neperzistentní paměťové médium, aby bylo možné načíst stejná data později. Serializace, funkce poskytovaná CLR, vám může pomoci toho dosáhnout.

Serializaci lze definovat jako proces převodu objektu na proud bajtů, přetrvávání stavu objektu do paměti, databáze souboru. Rubem serializace je deserializace, která rekonstruuje objekt z proudu bajtů. Jinými slovy, deserializace je proces převodu serializovaného objektu do původního stavu.

Serializace je nutná k předání objektu po drátu - usnadňuje přenos objektu po síti. Proto můžete využít serializaci k předání objektu z jedné domény aplikace do druhé. Můžete také využít výhod serializace k vytvoření klonu objektu.

Serializace je však také nákladná z důvodu režie prostředků zapojené do serializace a de-serializace objektů. Chcete-li pracovat se Serializací v .Net, měli byste využít výhod oboru názvů System.Runtime.Serialization, tj. Měli byste tento jmenný prostor zahrnout do svého programu.

Můžete vytvořit třídu serializovatelnou pomocí atributu [Serializable]. Zde je příklad, který ukazuje, jak můžete tento atribut použít na třídu.

[Serializovatelné]

veřejná třída Produkt

{

public int productCode;

veřejný řetězec productName;

}

Nyní, pokud chcete omezit serializaci jednoho nebo více členů třídy, můžete použít NonSerialized atribut, jak je znázorněno v níže uvedeném fragmentu kódu.

[Serializovatelné]

veřejná třída Produkt

    {

public int productCode;

veřejný řetězec productName;

[Neserializováno ()]

veřejný dvojitý produktCena;

    }

Rámec .Net poskytuje podporu pro následující typy serializace.

  1. Binární
  2. MÝDLO
  3. XML
  4. Zvyk

Binární serializace

Binární serializace je nejrychlejší ze všech technik serializace - lze ji použít k serializaci objektu do binárního proudu. Jedná se o typ serializace, který lze použít k serializaci objektu do výstupního proudu při zachování identity objektu - informace o typu se v procesu serializace neztratí. Všimněte si, že při použití binární serializace se objekt uloží jako celek. Chcete-li pracovat s binární serializací, měli byste zahrnout jmenný prostor System.Runtime.Serialization.Formatters.Binary.

Serializace SOAP

Serializace SOAP (Simple Object Access Protocol) je dobrou volbou, pokud chcete přenést objekty z jedné aplikace do druhé, když tyto aplikace používají heterogenní architektury. Hlavní výhodou použití serializace SOAP je v zásadě přenositelnost. Serializaci SOAP lze použít k serializaci objektu ve formátu SOAP. Chcete-li pracovat se serializací SOAP, měli byste do svého programu zahrnout jmenný prostor System.Runtime.Serialization.Formatters.Soap. Všimněte si, že stejně jako serializace XML, objekty, které jsou serializovány pomocí serializace SOAP, jsou zachovány jako XML.

Serializace XML

Serializace XML je typ serializace, který se používá k serializaci veřejných členů instance třídy do proudu XML. Všimněte si, že serializace XML je ve srovnání s binární serializací pomalá - ve skutečnosti je mnohem pomalejší. Primární výhodou XML serializatonu je, že poskytuje podporu napříč platformami a protože je textová, je čitelná a lze ji také upravovat. Můžete využít výhod XmlAttribute a nastavit ji na vlastnost, která umožní serializaci vlastnosti pomocí serializace XML. Následující fragment kódu ukazuje, jak můžete použít XmlAttribute na vlastnosti.

[XmlAttribute ("productName")]

veřejný řetězec ProductName

{

dostat

  {

vrátit název produktu;

  }

soubor

  {

productName = hodnota;

  }

}

Chcete-li serializovat a de-serializovat objekt pomocí serializace XML, můžete použít XmlSerializer. Následující fragment kódu ukazuje, jak můžete serializovat objekt pomocí serializace XML - všimněte si, jak se používá XmlSerializer.

XmlSerializer xmlSerializer = nový XmlSerializer (typeof (Product));

pomocí (TextWriter textWriter = nový StreamWriter (@ "D: \ Product.xml"))

 {

xmlSerializer.Serialize (textWriter, productObject);

 }

Vlastní serializace

Můžete využít vlastní serializaci k řízení toho, jak lze instanci typu serializovat a deserializovat. Vlastní serializaci můžete implementovat implementací rozhraní ISerializable. Rozhraní ISerializable deklaruje metodu GetObjectData (). Následující fragment kódu ukazuje, jak můžete implementovat vlastní techniku ​​serializace implementací rozhraní ISerializable.

[Serializovatelné]

veřejná třída Produkt: ISerializovatelný

{

public void GetObjectData (informace SerializationInfo, kontext StreamingContext)

    {

// Obvyklý kód

    }

}