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: