Serializzazione e deserializzazione in C# con esempio

⚡ Riepilogo intelligente

In C#, la serializzazione converte un oggetto in un flusso di byte in modo che possa essere salvato in un file o inviato tra applicazioni; la deserializzazione ricostruisce l'oggetto. Qui imparerai a serializzare e deserializzare gli oggetti con degli esempi.

  • 🔄 Che cosa è: La serializzazione scrive un oggetto C# in un file, mentre la deserializzazione lo legge.
  • 🏷️ [Serializzabile]: Una classe necessita dell'attributo [Serializable] prima di poter essere serializzata.
  • 💾 Formato binario: BinaryFormatter con un FileStream scrive l'oggetto in formato binario.
  • 🧩 Formati: C# supporta anche la serializzazione XML e JSON per un output leggibile.
  • 🤖 Aiuto tramite intelligenza artificiale: Strumenti di intelligenza artificiale come GitHub Copilot generano istantaneamente il codice di serializzazione.

Serializzazione e deserializzazione in C#

Serializzazione e deserializzazione in C#

Il concetto di serializzazione e deserializzazione viene utilizzato ogni volta che i dati relativi agli oggetti devono essere inviati da un'applicazione all'altra. La serializzazione viene utilizzata per esportare i dati dell'applicazione in un file. L'applicazione di destinazione utilizza quindi la deserializzazione per esportare i dati.tract i dati dall'applicazione per un ulteriore utilizzo.

La serializzazione è un concetto in cui gli oggetti della classe C# vengono scritti o serializzati su file. Supponiamo che tu abbia una classe C# chiamata Tutorial. E la classe ha 2 proprietà di ID e nome Tutorial.

La serializzazione può essere utilizzata per scrivere direttamente le proprietà dei dati della classe Tutorial in un file. La deserializzazione viene utilizzata per leggere i dati dal file e costruire nuovamente l'oggetto Tutorial.

Tipi di serializzazione in C#

C# supporta diversi formati di serializzazione, e la scelta dipende da dove verranno utilizzati i dati. I tipi principali sono elencati di seguito.

  • Serializzazione binaria Converte un oggetto in un flusso binario compatto. È veloce ma non leggibile dall'uomo ed è legato a .NET.
  • serializzazione XML Utilizza la classe XmlSerializer per scrivere le proprietà pubbliche di un oggetto in un file XML leggibile.
  • Serializzazione JSON Utilizza System.Text.Json o Newtonsoft.Json per produrre JSON leggero, il formato più comune per le API web.
  • serializzazione SOAP formatta i dati come messaggi SOAP per i servizi web meno recenti.

Come serializzare un oggetto in C#

Diamo un'occhiata a un esempio di come possiamo raggiungere questo obiettivo.

Nel nostro esempio, eseguiremo i passaggi di alto livello nel codice riportati di seguito

  1. Crea una classe chiamata Tutorial che ha 2 proprietà, ovvero ID e Nome
  2. Creeremo quindi un oggetto dalla classe e assegneremo un valore "1" alla proprietà ID e un valore ".Net" alla proprietà name.
  3. Utilizzeremo quindi la serializzazione per serializzare l'oggetto sopra in un file chiamato Esempio.txt
  4. Infine, utilizzeremo la deserializzazione per deserializzare l'oggetto dal file e visualizzare i valori nella Console.

Immettere il codice seguente nel file program.cs dell'applicazione console.

Passo 1) Aggiungi la classe.

Il primo passo è aggiungere la classe che verrà utilizzata per la serializzazione

Serializza un oggetto in C#

Code Spiegazione:-

  1. La classe che deve essere serializzata deve avere l'attributo [Serializable]. Questa è una parola chiave in C#. Questa parola chiave viene quindi allegata alla classe Tutorial. Se non menzioni questo attributo, riceverai un errore quando proverai a serializzare la classe.
  2. La prossima è la definizione della classe che verrà serializzata. Qui stiamo definendo una classe chiamata "Tutorial" e fornendo 2 proprietà, una è "ID" e l'altra è "Nome".

Passo 2) Crea l'oggetto.

In questo passaggio, per prima cosa creeremo l'oggetto della classe Tutorial e lo serializzeremo nel file chiamato Esempio.txt

Serializza un oggetto in C#

Code Spiegazione:-

  1. Per prima cosa creiamo un oggetto della classe Tutorial. Assegniamo quindi il valore “1” all'ID e “.net” alla proprietà name.
  2. Utilizziamo quindi la classe formattatore che viene utilizzata per serializzare o convertire l'oggetto in un formato binario. I dati nel file in serializzazione vengono eseguiti in formato binario. Successivamente, creiamo un oggetto flusso di file. L'oggetto flusso di file viene utilizzato per aprire il file Esempio.txt per scopi di scrittura. Le parole chiave FileMode.Create e FileMode.Write vengono utilizzate per menzionare specificamente che il file deve essere aperto per scopi di scrittura.
  3. Infine, utilizziamo il metodo Serialize per trasferire i dati binari nel file. Chiudiamo quindi lo stream, dal momento della scrittura operazione è completo.

Passo 3) Utilizzare la deserializzazione.

Infine per garantire che i dati siano presenti nel file, utilizziamo la deserializzazione per deserializzare l'oggetto dal file.

Serializza un oggetto in 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 Spiegazione:-

  1. Creiamo l’oggetto”ruscello" per aprire il file Esempio.txt in modalità di sola lettura.
  2. Utilizziamo quindi la classe formattatore utilizzata per deserializzare l'oggetto, che è archiviato nel file Esempio.txt. L'oggetto restituito è impostato sull'oggetto objnew.
  3. Infine, visualizziamo le proprietà dell'oggetto “objnew” sulla console utilizzando le proprietà “ID” e “name”.

Quando viene impostato il codice precedente e il progetto viene eseguito utilizzando Di Visual Studio, otterrai l'output seguente.

Produzione:-

Serializza un oggetto in C#

Dall'output precedente puoi vedere che i valori del file sono stati deserializzati correttamente e visualizzati nella console.

Serializzazione JSON in C#

JSON è il formato più utilizzato per le applicazioni moderne e le API web. Il formato integrato System.Text.Json Lo spazio dei nomi serializza e deserializza gli oggetti con una singola chiamata di metodo, come mostrato di seguito.

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

Produzione:

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

DOMANDE FREQUENTI

La serializzazione converte un oggetto C# in un flusso di byte (binari, XML o JSON) in modo che possa essere salvato in un file o inviato a un'altra applicazione. La deserializzazione ricostruisce l'oggetto a partire da tali dati.

L'attributo [Serializable] contrassegna una classe in modo che i suoi oggetti possano essere serializzati. Senza di esso, la serializzazione binaria genera un'eccezione quando si tenta di scrivere l'oggetto in un file.

C# supporta la serializzazione binaria (compatta, solo per .NET), la serializzazione XML tramite XmlSerializer, la serializzazione JSON tramite System.Text.Json e la serializzazione SOAP per i servizi web meno recenti.

La serializzazione scrive i dati di un oggetto in un file o in un flusso, mentre la deserializzazione legge quei dati e ricostruisce l'oggetto originale in memoria.

BinaryFormatter è ormai obsoleto e considerato insicuro perché può eseguire codice dannoso durante la deserializzazione. Microsoft Per le nuove applicazioni si consiglia di utilizzare System.Text.Json o XmlSerializer.

Gli assistenti basati sull'intelligenza artificiale come GitHub Copilot completano automaticamente le chiamate Serialize e Deserialize, aggiungono l'attributo [Serializable] e generano il codice di serializzazione JSON o XML a partire da un breve commento.

Sì. Gli strumenti basati sull'intelligenza artificiale generano classi modello, scelgono tra i formati JSON, XML e binario e aggiungono la gestione degli errori, in modo che il codice di serializzazione sia sicuro e completo.

La serializzazione binaria utilizza System.Runtime.Serialization.Formatters.Binary, JSON utilizza System.Text.Json e XML utilizza System.Xml.Serialization.

Riassumi questo post con: