Serializare și deserializare în C# cu exemplu

⚡ Rezumat inteligent

Serializarea în C# convertește un obiect într-un flux de octeți, astfel încât acesta să poată fi salvat într-un fișier sau trimis între aplicații; deserializarea reconstruiește obiectul. Aici veți învăța cum să serializați și să deserializați obiecte cu exemple.

  • 🔄 Ce este: Serializarea scrie un obiect C# într-un fișier, iar deserializarea îl citește înapoi.
  • 🏷️ [Serializabil]: O clasă are nevoie de atributul [Serializable] înainte de a putea fi serializată.
  • 💾 Format binar: BinaryFormatter cu un FileStream scrie obiectul în formă binară.
  • 🧩 formate: C# acceptă, de asemenea, serializarea XML și JSON pentru ieșire lizibilă.
  • 🤖 Ajutor AI: Instrumentele de inteligență artificială precum GitHub Copilot generează cod de serializare instantaneu.

Serializarea și deserializarea C#

Serializare și deserializare în C#

Conceptul de serializare și deserializare este utilizat ori de câte ori datele referitoare la obiecte trebuie trimise de la o aplicație la alta. Serializarea este utilizată pentru a exporta datele aplicației într-un fișier. Aplicația destinație folosește apoi deserializarea pentru a...tracdatele din aplicație pentru utilizare ulterioară.

Serializarea este un concept în care obiectele clasei C# sunt scrise sau serializate în fișiere. Să presupunem că ai avut o clasă C# numită Tutorial. Și clasa are 2 proprietăți de ID și nume de tutoriale.

Serializarea poate fi folosită pentru a scrie direct proprietățile de date ale clasei Tutorial într-un fișier. Deserializarea este folosită pentru a citi datele din fișier și pentru a construi din nou obiectul Tutorial.

Tipuri de serializare în C#

C# acceptă mai multe formate de serializare, iar alegerea unuia se face în funcție de locul în care vor fi utilizate datele. Principalele tipuri sunt enumerate mai jos.

  • Serializare binară convertește un obiect într-un flux binar compact. Este rapid, dar nu poate fi citit de om și este legat de .NET.
  • Serializare XML utilizează clasa XmlSerializer pentru a scrie proprietățile publice ale unui obiect într-un fișier XML lizibil.
  • Serializare JSON folosește System.Text.Json sau Newtonsoft.Json pentru a produce JSON ușor, cel mai comun format pentru API-urile web.
  • Serializarea SOAP formatează datele ca mesaje SOAP pentru serviciile web mai vechi.

Cum se serializa un obiect în C#

Să ne uităm la un exemplu despre cum putem realiza acest lucru.

În exemplul nostru, vom efectua pașii de mai jos de nivel înalt din cod

  1. Creați o clasă numită Tutorial care are 2 proprietăți, și anume ID și Name
  2. Apoi vom crea un obiect din clasă și vom atribui o valoare „1” proprietății ID și o valoare „.Net” proprietății nume.
  3. Vom folosi apoi serializarea pentru a serializa obiectul de mai sus într-un fișier numit Example.txt
  4. În cele din urmă, vom folosi deserializarea pentru a deserializa obiectul din fișier și pentru a afișa valorile în Consolă.

Introduceți codul de mai jos în fișierul program.cs al aplicației de consolă.

Pas 1) Adăugați clasa.

Primul pas este să adăugați clasa care va fi folosită pentru serializare

Serializați un obiect în C#

Code Explicaţie:-

  1. Clasa care trebuie serializată trebuie să aibă atributul [Serializable]. Acesta este un cuvânt cheie în C#. Acest cuvânt cheie este apoi atașat la clasa Tutorial. Dacă nu menționați acest atribut, veți primi o eroare când încercați să serializați clasa.
  2. Urmează definiția clasei care va fi serializată. Aici definim o clasă numită „Tutorial” și oferim 2 proprietăți, una este „ID” și cealaltă este „Nume”.

Pas 2) Creați obiectul.

În acest pas, mai întâi vom crea obiectul clasei Tutorial și îl vom serializa în fișierul numit Example.txt

Serializați un obiect în C#

Code Explicaţie:-

  1. Mai întâi, creăm un obiect al clasei Tutorial. Apoi atribuim valoarea „1” ID-ului și „.net” proprietății nume.
  2. Apoi folosim clasa de formatare care este folosită pentru a serializa sau a converti obiectul într-un format binar. Datele din fișierul în serializare se fac în format binar. Apoi, creăm un obiect flux de fișiere. Obiectul flux de fișiere este folosit pentru a deschide fișierul Example.txt în scopuri de scriere. Cuvintele cheie FileMode.Create și FileMode.Write sunt folosite pentru a menționa în mod specific faptul că fișierul trebuie deschis în scopuri de scriere.
  3. În cele din urmă, folosim metoda Serialize pentru a transfera datele binare în fișier. Închidem apoi fluxul, de la scriere operaţie este complet.

Pas 3) Utilizați deserializarea.

În cele din urmă, pentru a ne asigura că datele sunt prezente în fișier, folosim deserializarea pentru a deserializa obiectul din fișier.

Serializați un obiect în C#

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 Explicaţie:-

  1. Creăm obiectul „curent” pentru a deschide fișierul Example.txt în modul numai pentru citire.
  2. Apoi folosim clasa de formatare care este folosită pentru a deserializa obiectul, care este stocat în fișierul Example.txt. Obiectul returnat este setat la obiectul objnew.
  3. În cele din urmă, afișăm proprietățile obiectului „objnew” pe consolă folosind proprietățile „ID” și „name”.

Când codul de mai sus este setat și proiectul este rulat folosind Visual Studio, veți obține rezultatul de mai jos.

Ieșire: -

Serializați un obiect în C#

Puteți vedea din rezultatul de mai sus că valorile din fișier au fost deserializate corect și afișate în consolă.

Serializarea JSON în C#

JSON este formatul cel mai utilizat pentru aplicațiile moderne și API-urile web. Formatul încorporat System.Text.Json namespace-ul serializează și deserializează obiectele cu un singur apel de metodă, așa cum se arată mai jos.

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();
    }
  }
}

ieșire:

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

Întrebări frecvente

Serializarea convertește un obiect C# într-un flux de octeți (binar, XML sau JSON), astfel încât să poată fi salvat într-un fișier sau trimis către o altă aplicație. Deserializarea reconstruiește obiectul din acele date.

Atributul [Serializable] marchează o clasă astfel încât obiectele acesteia să poată fi serializate. Fără acesta, serializarea binară generează o excepție atunci când încercați să scrieți obiectul într-un fișier.

C# acceptă serializarea binară (compactă, doar pentru .NET), serializarea XML prin XmlSerializer, serializarea JSON prin System.Text.Json și serializarea SOAP pentru serviciile web mai vechi.

Serializarea scrie datele unui obiect într-un fișier sau flux, în timp ce deserializarea citește acele date înapoi și reconstruiește obiectul original în memorie.

BinaryFormatter este acum învechit și considerat nesigur, deoarece poate executa cod dăunător în timpul deserializării. Microsoft recomandă System.Text.Json sau XmlSerializer pentru aplicații noi.

Asistenții de inteligență artificială, precum GitHub Copilot, completează automat apelurile Serialize și Deserialize, adaugă atributul [Serializable] și generează cod de serializare JSON sau XML dintr-un comentariu scurt.

Da. Instrumentele bazate pe inteligență artificială generează clase de model, aleg între formate JSON, XML și binare și adaugă gestionarea erorilor, astfel încât codul de serializare să fie sigur și complet.

Serializarea binară folosește System.Runtime.Serialization.Formatters.Binary, JSON folosește System.Text.Json, iar XML folosește System.Xml.Serialization.

Rezumați această postare cu: