Szerializálás és deszerializálás C#-ban példával

⚡ Okos összefoglaló

A C#-ban a szerializálás egy objektumot bájtfolyammá alakít, így az fájlba menthető vagy alkalmazások között küldhető; a deszerializálás pedig újraépíti az objektumot. Itt példákon keresztül megtanulhatod az objektumok szerializálását és deszerializálását.

  • 🔄 Ami: A szerializáció egy C# objektumot ír egy fájlba, a deszerializáció pedig visszaolvassa azt.
  • 🏷️ [Szerializálható]: Egy osztálynak szüksége van a [Serializable] attribútumra, mielőtt szerializálható lenne.
  • 💾 Bináris formátum: A BinaryFormatter és a FileStream függvény bináris formátumban írja ki az objektumot.
  • 🧩 formátumok: A C# támogatja az XML és JSON szerializálást is az olvasható kimenet érdekében.
  • 🤖 MI segítség: Az olyan mesterséges intelligencia eszközök, mint a GitHub Copilot, azonnal generálnak szerializációs kódot.

C# szerializáció és deszerializáció

Sorozatosítás és deszerializálás C#-ban

A szerializálás és a deszerializálás fogalmát akkor használjuk, amikor objektumokra vonatkozó adatokat kell küldeni egyik alkalmazásból a másikba. A szerializálás az alkalmazásadatok fájlba exportálására szolgál. A célalkalmazás ezután deszerializálást használ a következőhöz:tracaz alkalmazásból származó adatokat további felhasználás céljából.

A szerializálás egy olyan fogalom, amelyben a C# osztályú objektumokat fájlba írják vagy szerializálják. Tegyük fel, hogy volt egy C# osztályod, a neve Tutorial. És az osztálynak 2 tulajdonsága van: ID és Tutorials név.

A sorozással közvetlenül egy fájlba írhatjuk a Tutorial osztály adattulajdonságait. A deszerializáció az adatok fájlból való kiolvasására és az oktatóanyag objektum újbóli létrehozására szolgál.

A szerializáció típusai C#-ban

A C# számos szerializációs formátumot támogat, és a választott formátumot az adatok felhasználási helye alapján választhatjuk ki. A főbb típusokat az alábbiakban soroljuk fel.

  • Bináris szerializáció Egy objektumot kompakt bináris adatfolyammá alakít. Gyors, de nem ember által olvasható, és .NET-hez kötött.
  • XML szerializálás az XmlSerializer osztályt használja egy objektum nyilvános tulajdonságainak olvasható XML fájlba írásához.
  • JSON szerializáció A System.Text.Json vagy a Newtonsoft.Json fájlokat használja könnyűsúlyú JSON létrehozásához, amely a webes API-k leggyakoribb formátuma.
  • SOAP szerializáció SOAP üzenetekként formázza az adatokat a régebbi webszolgáltatásokhoz.

Objektumok sorozatosítása C#-ban

Nézzünk egy példát arra, hogyan érhetjük el ezt.

Példánkban az alábbi magas szintű lépéseket fogjuk végrehajtani a kódban

  1. Hozzon létre egy Tutorial nevű osztályt, amelynek két tulajdonsága van, nevezetesen az azonosító és a név
  2. Ezután létrehozunk egy objektumot az osztályból, és „1” értéket rendelünk az ID tulajdonsághoz, és „.Net” értéket a név tulajdonsághoz.
  3. Ezután a szerializálást használjuk, hogy a fenti objektumot egy Példa.txt nevű fájlba szerializáljuk
  4. Végül a deserializációt használjuk az objektum szerializálására a fájlból, és megjelenítjük az értékeket a konzolban.

Írja be az alábbi kódot a konzolalkalmazás program.cs fájljába.

Step 1) Adja hozzá az osztályt.

Az első lépés a szerializáláshoz használt osztály hozzáadása

Objektum szerializálása C#-ban

Code Magyarázat:-

  1. A szerializálandó osztálynak rendelkeznie kell a [Serializable] attribútummal. Ez egy kulcsszó a C#-ban. Ezt a kulcsszót ezután a Tutorial osztályhoz csatoljuk. Ha nem említi ezt az attribútumot, hibaüzenetet fog kapni, amikor megpróbálja szerializálni az osztályt.
  2. Következő a szerializálandó osztály meghatározása. Itt meghatározunk egy „Tutorial” nevű osztályt, és 2 tulajdonságot biztosítunk, az egyik az „ID”, a másik a „Név”.

Step 2) Hozd létre az objektumot.

Ebben a lépésben először létrehozzuk a Tutorial osztály objektumát, és szerializáljuk a Példa.txt nevű fájlba.

Objektum szerializálása C#-ban

Code Magyarázat:-

  1. Először létrehozunk egy objektumot a Tutorial osztályból. Ezután az azonosítóhoz „1” értéket, a name tulajdonsághoz pedig „.net” értéket rendelünk.
  2. Ezután a formázó osztályt használjuk, amely az objektum szerializálására vagy bináris formátumra való konvertálására szolgál. A szerializált fájlban lévő adatok bináris formátumban történnek. Ezután létrehozunk egy fájlfolyam objektumot. A fájlfolyam objektum az Example.txt fájl megnyitására szolgál írási célokra. A FileMode.Create és FileMode.Write kulcsszavak kifejezetten megemlítik, hogy a fájlt írás céljából meg kell nyitni.
  3. Végül a Serialize metódust használjuk a bináris adatok fájlba átviteléhez. Ezután bezárjuk a patakot, az írás óta működés teljes.

Step 3) Használjon deserializációt.

Végül annak biztosítására, hogy az adatok jelen legyenek a fájlban, deszerializálást használunk az objektum deszerializálására a fájlból.

Objektum szerializálása C#-ban

using System;
using System.IO;
using System.Linq;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
  [Serializable]
  class Tutorial
  {
  public int ID;
  public String Name;
   static void Main(string[] args)
   {
    Tutorial obj = new Tutorial();
    obj.ID = 1;
    obj.Name = ".Net";

    IFormatter formatter = new BinaryFormatter();
    Stream stream = new FileStream(@"E:\ExampleNew.txt",FileMode.Create,FileAccess.Write);

    formatter.Serialize(stream, obj);
    stream.Close();

    stream = new FileStream(@"E:\ExampleNew.txt",FileMode.Open,FileAccess.Read);
    Tutorial objnew = (Tutorial)formatter.Deserialize(stream);

    Console.WriteLine(objnew.ID);
    Console.WriteLine(objnew.Name);

    Console.ReadKey();
  }
 }
}

Code Magyarázat:-

  1. Létrehozzuk az objektumot"folyam” a Példa.txt fájl csak olvasható módban való megnyitásához.
  2. Ezután a formázó osztályt használjuk, amely az objektum deszerializálására szolgál, és amely az Example.txt fájlban van tárolva. A visszaadott objektum az objnew objektumra van állítva.
  3. Végül megjelenítjük az „objnew” objektum tulajdonságait a konzolon az „ID” és „name” tulajdonságok használatával.

Ha a fenti kód be van állítva, és a projekt a használatával fut Visual Studio, akkor az alábbi kimenetet kapja.

Kimenet:-

Objektum szerializálása C#-ban

A fenti kimenetből láthatja, hogy a fájlból származó értékek megfelelően lettek deszerializálva, és megjelentek a konzolban.

JSON szerializáció C#-ban

A JSON a legszélesebb körben használt formátum a modern alkalmazásokhoz és webes API-khoz. A beépített System.Text.Json A namespace egyetlen metódushívással szerializálja és deszerializálja az objektumokat, az alábbiak szerint.

using System;
using System.Text.Json;
namespace DemoApplication
{
  class Tutorial
  {
    public int ID { get; set; }
    public string Name { get; set; }
  }
  class Program
  {
    static void Main(string[] args)
    {
      Tutorial obj = new Tutorial { ID = 1, Name = ".Net" };
      string json = JsonSerializer.Serialize(obj);
      Console.WriteLine(json);

      Tutorial objnew = (Tutorial)JsonSerializer.Deserialize(json, typeof(Tutorial));
      Console.WriteLine(objnew.Name);
      Console.ReadKey();
    }
  }
}

output:

{"ID":1,"Name":".Net"}
.Net

GYIK

A szerializálás egy C# objektumot bájtfolyammá (bináris, XML vagy JSON) alakít át, így az fájlba menthető vagy egy másik alkalmazásba küldhető. A deszerializálás az objektumot ezekből az adatokból építi újra.

A [Serializable] attribútum egy osztályt jelöl, így az objektumai szerializálhatók. Enélkül a bináris szerializálás kivételt dob, amikor megpróbálod fájlba írni az objektumot.

A C# támogatja a bináris szerializációt (kompakt, csak .NET-re), az XML szerializációt XmlSerializer-en keresztül, a JSON szerializációt System.Text.Json-on keresztül, valamint a SOAP szerializációt régebbi webszolgáltatásokhoz.

A szerializáció egy objektum adatait fájlba vagy adatfolyamba írja, míg a deszerializáció visszaolvassa az adatokat, és rekonstruálja az eredeti objektumot a memóriában.

A BinaryFormatter mára elavulttá és nem biztonságosnak tekinthető, mivel a deszerializálás során káros kódot futtathat. Microsoft Új alkalmazásokhoz a System.Text.Json vagy az XmlSerializer használatát javasolja.

Az olyan mesterséges intelligencia asszisztensek, mint a GitHub Copilot, automatikusan kiegészítik a szerializálási és deserializálási hívásokat, hozzáadják a [Serializable] attribútumot, és JSON vagy XML szerializálási kódot generálnak egy rövid megjegyzésből.

Igen. A mesterséges intelligenciával működő eszközök modellosztályokat generálnak, választhatnak a JSON, XML és bináris formátumok közül, és hibakezelést is hozzáadnak, hogy a szerializációs kód biztonságos és teljes legyen.

A bináris szerializálás a System.Runtime.Serialization.Formatters.Binary, a JSON a System.Text.Json, az XML pedig a System.Xml.Serialization fájlt használja.

Foglald össze ezt a bejegyzést a következőképpen: