Serialisointi ja deserialisointi C#:ssa esimerkin avulla

⚡ Älykäs yhteenveto

C#:n sarjoittaminen muuntaa objektin tavuvirraksi, jotta se voidaan tallentaa tiedostoon tai lähettää sovellusten välillä; deserialisointi puolestaan ​​rakentaa objektin uudelleen. Tässä osiossa opit serialisoimaan ja deserialisoimaan objekteja esimerkkien avulla.

  • 🔄 Mitä se on: Sarjallistaminen kirjoittaa C#-objektin tiedostoon ja deserialisointi lukee sen takaisin.
  • 🏷️ [Sarjoitettavissa]: Luokka tarvitsee [Serializable]-attribuutin ennen kuin se voidaan sarjoittaa.
  • 💾 Binaarimuoto: BinaryFormatter ja FileStream kirjoittavat objektin binäärimuotoon.
  • 🧩 muodoissa: C# tukee myös XML- ja JSON-sarjoittelua luettavan tulosteen saamiseksi.
  • 🤖 Tekoälyn apu: Tekoälytyökalut, kuten GitHub Copilot, luovat sarjoittelukoodia välittömästi.

C#:n sarjoittaminen ja deserialisointi

Serialisointi ja deserialisointi C#:ssa

Sarjallistamisen ja deserialisoinnin käsitteitä käytetään aina, kun objekteihin liittyvää dataa on lähetettävä sovelluksesta toiseen. Sarjallistamista käytetään sovellusdatan viemiseen tiedostoon. Kohdesovellus käyttää sitten deserialisointia tietojen lähettämiseen.tract tiedot sovelluksesta myöhempää käyttöä varten.

Serialisointi on käsite, jossa C#-luokan objektit kirjoitetaan tai sarjoidaan tiedostoiksi. Oletetaan, että sinulla oli C#-luokka nimeltä Tutorial. Ja luokassa on 2 ominaisuutta ID ja Tutorials nimi.

Sarjaamalla voidaan kirjoittaa suoraan Tutorial-luokan dataominaisuudet tiedostoon. Deserialisointia käytetään tietojen lukemiseen tiedostosta ja Tutorial-objektin uudelleen rakentamiseen.

Sarjallistamisen tyypit C#:ssa

C# tukee useita serialisointimuotoja, ja voit valita yhden sen perusteella, missä tietoja käytetään. Tärkeimmät tyypit on lueteltu alla.

  • Binäärisarja muuntaa objektin kompaktiksi binäärivirraksi. Se on nopea, mutta ei ihmisen luettavissa ja on sidottu .NET:iin.
  • XML-sarjoittelu käyttää XmlSerializer-luokkaa kirjoittaakseen objektin julkiset ominaisuudet luettavaan XML-tiedostoon.
  • JSON-serialisointi käyttää System.Text.Jsonia tai Newtonsoft.Jsonia kevyen JSONin tuottamiseen, joka on yleisin web-APIen muoto.
  • SOAP-serialisointi muotoilee tiedot SOAP-viesteiksi vanhemmille verkkopalveluille.

Objektin sarjoittaminen C#:ssa

Katsotaanpa esimerkkiä siitä, kuinka voimme saavuttaa tämän.

Esimerkissämme aiomme suorittaa alla olevat korkean tason vaiheet koodissa

  1. Luo luokka nimeltä Tutorial, jossa on 2 ominaisuutta, nimittäin ID ja nimi
  2. Luomme sitten luokasta objektin ja annamme arvon "1" ID-ominaisuuteen ja ".Net"-arvon nimiominaisuuteen.
  3. Käytämme sitten serialisointia sarjoittamaan yllä olevan objektin tiedostoon nimeltä Esimerkki.txt
  4. Lopuksi käytämme deserialisointia deserialoimaan objektin tiedostosta ja näyttämään arvot konsolissa.

Kirjoita alla oleva koodi konsolisovelluksen program.cs-tiedostoon.

Vaihe 1) Lisää luokka.

Ensimmäinen vaihe on lisätä luokka, jota käytetään sarjoitukseen

Sarjaa objekti C#:ssa

Code Selitys:-

  1. Sarjatettavalla luokalla on oltava [Serializable]-attribuutti. Tämä on avainsana C#:ssa. Tämä avainsana liitetään sitten Tutorial-luokkaan. Jos et mainitse tätä attribuuttia, saat virheilmoituksen, kun yrität sarjoittaa luokkaa.
  2. Seuraavaksi määritellään luokka, joka sarjoitetaan. Tässä määrittelemme luokan nimeltä "Tutorial" ja tarjoamme 2 ominaisuutta, joista toinen on "ID" ja toinen "Nimi".

Vaihe 2) Luo objekti.

Tässä vaiheessa luomme ensin Tutorial-luokan objektin ja sarjoimme sen tiedostoon nimeltä Esimerkki.txt

Sarjaa objekti C#:ssa

Code Selitys:-

  1. Ensin luodaan Tutorial-luokan objekti. Määritämme sitten arvon "1" ID:lle ja ".net" nimen ominaisuudelle.
  2. Käytämme sitten muotoilijaluokkaa, jota käytetään sarjoittamaan tai muuttamaan objekti binäärimuotoon. Serialisoitavan tiedoston tiedot tehdään binäärimuodossa. Seuraavaksi luomme tiedostovirtaobjektin. Tiedostovirtaobjektia käytetään tiedoston Esimerkki.txt avaamiseen kirjoitustarkoituksiin. Avainsanoja FileMode.Create ja FileMode.Write käytetään erityisesti mainitsemaan, että tiedosto tulee avata kirjoittamista varten.
  3. Lopuksi käytämme Serialize-menetelmää binääritietojen siirtämiseen tiedostoon. Suljemme sitten virran kirjoittamisen jälkeen toiminta on valmis.

Vaihe 3) Käytä deserialisointia.

Lopuksi varmistaaksemme, että tiedot ovat tiedostossa, käytämme deserialisointia kohteen sarjoittamiseksi tiedostosta.

Sarjaa objekti C#:ssa

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 Selitys:-

  1. Luomme kohteen "virta" avataksesi tiedoston Esimerkki.txt vain luku -tilassa.
  2. Käytämme sitten muotoilijaluokkaa, jota käytetään deserialisoimaan objekti, joka on tallennettu Esimerkki.txt-tiedostoon. Palautettu objekti asetetaan objektiksi objnew.
  3. Lopuksi näytämme objektin "objnew" ominaisuudet konsolille käyttämällä "ID" ja "name" ominaisuuksia.

Kun yllä oleva koodi on asetettu ja projektia ajetaan käyttäen Visual Studio, saat alla olevan tulosteen.

Lähtö: -

Sarjaa objekti C#:ssa

Yllä olevasta lähdöstä näet, että tiedoston arvot sarjoitettiin oikein ja ne näytettiin konsolissa.

JSON-sarjallistaminen C#:lla

JSON on yleisimmin käytetty muoto nykyaikaisissa sovelluksissa ja web-rajapinnoissa. Sisäänrakennettu System.Text.Json namespace sarjoittaa ja deserialisoi objektit yhdellä metodikutsulla, kuten alla on esitetty.

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

lähtö:

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

UKK

Sarjallistaminen muuntaa C#-objektin tavuvirraksi (binääri-, XML- tai JSON-muotoon), jotta se voidaan tallentaa tiedostoon tai lähettää toiseen sovellukseen. Deserialointi rakentaa objektin uudelleen näistä tiedoista.

[Serializable]-attribuutti merkitsee luokan, jotta sen objektit voidaan serialisoida. Ilman sitä binäärinen serialisointi heittää poikkeuksen, kun yrität kirjoittaa objektia tiedostoon.

C# tukee binääristä serialisointia (kompakti, vain .NET), XML-serialisointia XmlSerializerin kautta, JSON-serialisointia System.Text.Jsonin kautta ja SOAP-serialisointia vanhemmille verkkopalveluille.

Sarjallistamisessa objektin tiedot kirjoitetaan tiedostoon tai virtaan, kun taas deserialisoinnissa tiedot luetaan takaisin ja alkuperäinen objekti rekonstruoidaan muistiin.

BinaryFormatter on nyt vanhentunut ja sitä pidetään turvattomana, koska se voi suorittaa haitallista koodia deserialisoinnin aikana. Microsoft suosittelee System.Text.Json- tai XmlSerializer-funktioita uusille sovelluksille.

Tekoälyavustajat, kuten GitHub Copilot, täydentävät Serialize- ja Deserialize-kutsuja automaattisesti, lisäävät [Serializable]-attribuutin ja luovat JSON- tai XML-serialisointikoodia lyhyestä kommentista.

Kyllä. Tekoälyllä toimivat työkalut luovat malliluokkia, valitsevat JSON-, XML- ja binäärimuotojen välillä ja lisäävät virheenkäsittelyn, jotta serialisointikoodisi on turvallinen ja täydellinen.

Binäärisarjana käytetään System.Runtime.Serialization.Formatters.Binary-tiedostoa, JSON käyttää System.Text.Jsonia ja XML käyttää System.Xml.Serialization-tiedostoa.

Tiivistä tämä viesti seuraavasti: