Forklar serialisering og deserialisering i C#

Forklar serialisering og deserialisering i C#
Serialisering refererer til handlingen med å transformere et objekt til et format som kan overføres eller lagres, mens deserialisering er prosessen med å konvertere de serialiserte dataene tilbake til dens opprinnelige form.

Denne artikkelen vil forklare Serialisering og deserialisering I C# med et eksempel.

Serialisering i C#

For å konvertere et objekt til et format som kan lagres eller overføres over en nettverksserialisering, brukes dette formatet et XML -format, binært format eller noe annet format. Serialisering brukes til datalagring og overføring, og det er et viktig konsept innen C# -programmering.

La oss ta et eksempel for å forstå serialisering i C#, anta at vi har en "Ansatt" Klasse som inneholder ansattes navn, ID og lønn:

ved hjelp av system;
Bruke system.Io;
Bruke system.Runtime.Serialisering;
Bruke system.Runtime.Serialisering.Json;
[DataContract]
ansatt i offentlig klasse

[Datamember]
offentlig strengnavn get; sett;
[Datamember]
public int ID get; sett;
[Datamember]
offentlig dobbeltlønn get; sett;

Klasseprogram

statisk tomrom (streng [] args)

Ansatt emp = ny ansatt name = "Mark", id = 005, lønn = 10000;
DataContractSerializer Serializer = ny DataContractSerializer (TypeOf (ansatt));
Bruker (MemoryStream Stream = new MemoryStream ())

Serialiserer.WritObject (Stream, EMP);
byte [] SerializedData = Stream.ToArray ();
Konsoll.WritLine ("Serialiserte data:");
Konsoll.WritLine (BitConverter.ToString (SerializedData).Erstatte("-", ""));
// Skriv de serialiserte dataene til en fil ved hjelp av filestream
Streng filnavn = "Serialisert data.bin ";
String filepath = sti.Kombiner (miljø.CurrentDirectory, filnavn);
Bruker (filestreamFilestream = nytt Filestream (FilePath, Filemode.Skape))

filestream.Skriv (SerializedData, 0, SerializedData.Lengde);

Konsoll.WritLine ($ "Serialiserte data lagret til fil: filepath");


Ovennevnte C# -kode viser hvordan man serialiserer et objekt i en tilpasset klasse som er navngitt "Ansatt" bruker DataContractSerializer klasse fra System.Runtime.Serialisering navneområde. Klassen har tre egenskaper: navn, id og lønn, som alle er merket med Datamember attributt for å indikere at de skal inkluderes i serialiseringsprosessen.

I hovedsak en tilfelle av Ansatt Klassen opprettes, og dens egenskaper er satt med prøvedata og DataContractSerializer blir deretter brukt til å serialisere objektet til en byte -matrise, som lagres i en fil ved hjelp av en filestream. Banen til filen er spesifisert ved hjelp av Sti.Kombinere og Miljø.CurrentDirectory () Funksjoner og deretter vises de serialiserte dataene i konsollen sammen med filstien:

Deserialisering i C#

Deserialisering er prosessen med å konvertere serialiserte data, vanligvis lagret i en fil, eller overført over et nettverk, tilbake til sin opprinnelige form. I C#, prosessen med deserialisering innebærer å lage et objekt fra den serialiserte formen, som kan oppnås ved bruk av forskjellige innebygde klasser som DataContractSerializer eller XMLSerializer.

La oss ta et eksempel for å forstå deserialisering i C# og bruke den samme serialiserte filen vi opprettet tidligere og deserialisere den, nedenfor er koden for den:

ved hjelp av system;
Bruke system.Io;
Bruke system.Runtime.Serialisering;
Bruke system.Runtime.Serialisering.Json;
[DataContract]
ansatt i offentlig klasse

[Datamember]
offentlig strengnavn get; sett;
[Datamember]
public int ID get; sett;
[Datamember]
offentlig dobbeltlønn get; sett;

Klasseprogram

statisk tomrom (streng [] args)

DataContractSerializer Serializer = ny DataContractSerializer (TypeOf (ansatt));
// Les de serialiserte dataene fra filen ved hjelp av filestream
Streng filnavn = "Serialisert data.bin ";
String filepath = sti.Kombiner (miljø.CurrentDirectory, filnavn);
Bruker (filestReamReadStream = nytt Filestream (FilePath, Filemode.Åpen))

Ansatt Deserializedemp = (Ansatt) Serializer.ReadObject (ReadStream);
Konsoll.WritLine ($ "Deserialisert ansatt: Navn - Deserializedemp.Navn, id - Deserialisedemp.Id, lønn - deserializedemp.Lønn");


Ovennevnte C# -kode bruker DataContractSerializer Klasse for å deserialisere et 'ansattes' objekt som tidligere har blitt serialisert og lagret i en binær fil. Ansattsklassen er definert med Datamember attributter på dens egenskaper for å indikere at disse skal serialiseres/deserialiseres. Hovedet oppretter en forekomst av serialisatoren og åpner den binære filen ved hjelp av en filestream og serialisatorens ReadObject () -funksjon blir deretter brukt til å lese de serialiserte dataene og opprette et nytt ansattobjekt. Ansattsobjektet skrives deretter ut til konsollen for å bekrefte at det har blitt deserialisert med hell.

Siste tanker

I C# programmering, Serialisering og deserialisering er viktige konsepter som brukes til datalagring og overføring. Serialisering innebærer å transformere et objekt til et format som er egnet for lagring eller overføring, mens deserialisering innebærer den omvendte prosessen med å konvertere de serialiserte dataene tilbake til sin opprinnelige form. I det medfølgende kodeeksemplet, DataContractSerializer Klasse brukes til å serialisere en forekomst av ansattklassen til en byte -matrise, som deretter lagres i en fil. De deserialisering Prosess innebærer å lese de serialiserte dataene fra filen og bruke den samme serialisatoren for å deserialisere dem tilbake til en forekomst av ansattklassen.