Örnekle C#'ta Serileştirme ve Seriden Çıkarma

⚡ Akıllı Özet

C#'da serileştirme, bir nesneyi bir bayt akışına dönüştürerek dosyaya kaydedilmesini veya uygulamalar arasında gönderilmesini sağlar; seri durumdan çıkarma ise nesneyi yeniden oluşturur. Burada, örneklerle nesnelerin serileştirilmesi ve seri durumdan çıkarılması işlemlerini öğreneceksiniz.

  • 🔄 Ne olduğunu: Serileştirme, bir C# nesnesini bir dosyaya yazar ve seri durumdan çıkarma ise onu geri okur.
  • ???? ️ [Serileştirilebilir]: Bir sınıfın serileştirilebilmesi için [Serializable] özniteliğine sahip olması gerekir.
  • 💾 İkili format: FileStream ile birlikte kullanılan BinaryFormatter, nesneyi ikili biçimde yazar.
  • 🧩 Biçimleri: C# ayrıca okunabilir çıktı için XML ve JSON serileştirmeyi de destekler.
  • 🤖 Yapay zekâ yardımı: GitHub Copilot gibi yapay zeka araçları serileştirme kodunu anında oluşturur.

C# Serileştirme ve Serileştirmeden Çıkarma

C#'ta Serileştirme ve Seriden Çıkarma

Nesnelere ait verilerin bir uygulamadan diğerine gönderilmesi gerektiğinde serileştirme ve seri durumdan çıkarma kavramları kullanılır. Serileştirme, uygulama verilerini bir dosyaya aktarmak için kullanılır. Hedef uygulama daha sonra verileri dosyadan çıkarmak için seri durumdan çıkarma işlemini kullanır.tracUygulamadan elde edilen verileri daha sonraki kullanımlar için saklayın.

Serileştirme, C# sınıfı nesnelerinin dosyalara yazıldığı veya serileştirildiği bir kavramdır. Diyelim ki Tutorial adında bir C# sınıfınız var. Ve sınıfın ID ve Öğreticiler adı olmak üzere 2 özelliği vardır.

Serileştirme, Tutorial sınıfının veri özelliklerini doğrudan bir dosyaya yazmak için kullanılabilir. Seri durumdan çıkarma, dosyadaki verileri okumak ve Eğitim nesnesini yeniden oluşturmak için kullanılır.

C#'da Serileştirme Türleri

C#, çeşitli serileştirme formatlarını destekler ve verilerin nerede kullanılacağına bağlı olarak birini seçersiniz. Başlıca türler aşağıda listelenmiştir.

  • İkili serileştirme Bir nesneyi kompakt bir ikili akışa dönüştürür. Hızlıdır ancak insan tarafından okunabilir değildir ve .NET'e bağlıdır.
  • XML serileştirme XmlSerializer sınıfını kullanarak bir nesnenin genel özelliklerini okunabilir bir XML dosyasına yazar.
  • JSON serileştirme Web API'leri için en yaygın format olan hafif JSON üretmek için System.Text.Json veya Newtonsoft.Json kullanır.
  • SOAP serileştirme Eski web servisleri için verileri SOAP mesajları olarak biçimlendirir.

C#'ta Bir Nesne Nasıl Serileştirilir?

Bunu nasıl başarabileceğimize dair bir örneğe bakalım.

Örneğimizde kodda aşağıdaki üst düzey adımları gerçekleştireceğiz.

  1. ID ve Name olmak üzere 2 özelliğe sahip Tutorial adında bir sınıf oluşturun.
  2. Daha sonra sınıftan bir nesne oluşturup ID özelliğine “1”, name özelliğine ise “.Net” değerini atayacağız.
  3. Daha sonra yukarıdaki nesneyi Örnek.txt adlı bir dosyaya serileştirmek için serileştirmeyi kullanacağız.
  4. Son olarak, nesneyi dosyadan seri durumdan çıkarmak ve değerleri Konsolda görüntülemek için seri durumdan çıkarma işlemini kullanacağız.

Konsol uygulamasının program.cs dosyasına aşağıdaki kodu girin.

) 1 Adım Sınıfı ekleyin.

İlk adım serileştirme için kullanılacak sınıfı eklemektir

C#'ta bir nesneyi serileştirme

Code Açıklama:-

  1. Serileştirilmesi gereken sınıfın [Serializable] özelliğine sahip olması gerekir. Bu C#'ta bir anahtar kelimedir. Bu anahtar kelime daha sonra Tutorial sınıfına eklenir. Bu niteliği belirtmezseniz sınıfı serileştirmeye çalıştığınızda hata alırsınız.
  2. Daha sonra serileştirilecek sınıfın tanımı yer almaktadır. Burada “Tutorial” adında bir sınıf tanımlıyoruz ve biri “ID”, diğeri “Name” olmak üzere 2 özellik sağlıyoruz.

) 2 Adım Nesneyi oluşturun.

Bu adımda öncelikle Tutorial sınıfının nesnesini oluşturacağız ve onu example.txt adlı dosyaya seri hale getireceğiz.

C#'ta bir nesneyi serileştirme

Code Açıklama:-

  1. Öncelikle Tutorial sınıfına ait bir nesne oluşturuyoruz. Daha sonra ID’ye “1”, name özelliğine ise “.net” değerini atadık.
  2. Daha sonra nesneyi serileştirmek veya ikili biçime dönüştürmek için kullanılan biçimlendirici sınıfını kullanırız. Serileştirmede dosyadaki veriler ikili formatta yapılır. Daha sonra bir dosya akışı nesnesi oluşturuyoruz. Dosya akışı nesnesi, yazma amacıyla Örnek.txt dosyasını açmak için kullanılır. FileMode.Create ve FileMode.Write anahtar kelimeleri, dosyanın yazma amacıyla açılması gerektiğini özellikle belirtmek için kullanılır.
  3. Son olarak ikili verileri dosyaya aktarmak için Serialize yöntemini kullanıyoruz. Daha sonra yazma işleminden bu yana akışı kapatıyoruz operasyon tamamlandı.

) 3 Adım Seri durumdan çıkarma özelliğini kullanın.

Son olarak verinin dosyada mevcut olduğundan emin olmak için, nesneyi dosyadan seri durumdan çıkarmak için seri durumdan çıkarma yöntemini kullanırız.

C#'ta bir nesneyi serileştirme

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 Açıklama:-

  1. Nesneyi yaratıyoruz”dereÖrnek.txt dosyasını salt okuma modunda açmak için.
  2. Daha sonra, Sample.txt dosyasında saklanan nesnenin seri durumdan çıkarılması için kullanılan biçimlendirici sınıfını kullanırız. Döndürülen nesne, objnew nesnesine ayarlanır.
  3. Son olarak “ID” ve “name” özelliklerini kullanarak “objnew” nesnesinin özelliklerini konsola gösteriyoruz.

Yukarıdaki kod ayarlandığında ve proje kullanılarak çalıştırıldığında Visual Studio, aşağıdaki çıktıyı alacaksınız.

Çıktı:-

C#'ta bir nesneyi serileştirme

Yukarıdaki çıktıdan, dosyadaki değerlerin düzgün bir şekilde seri durumdan çıkarıldığını ve konsolda görüntülendiğini görebilirsiniz.

C#'da JSON Serileştirme

JSON, modern uygulamalar ve web API'leri için en yaygın kullanılan formattır. Dahili yapısı sayesinde... System.Text.Json Aşağıda gösterildiği gibi, ad alanı nesneleri tek bir yöntem çağrısıyla serileştirir ve seri durumdan çıkarır.

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

Çıktı:

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

SSS

Serileştirme, bir C# nesnesini bir bayt akışına (ikili, XML veya JSON) dönüştürerek dosyaya kaydedilmesini veya başka bir uygulamaya gönderilmesini sağlar. Serileştirmenin sonlandırılması ise bu verilerden nesneyi yeniden oluşturur.

[Serializable] özniteliği, bir sınıfın nesnelerinin serileştirilebilmesini sağlar. Bu öznitelik olmadan, nesneyi bir dosyaya yazmaya çalıştığınızda ikili serileştirme bir istisna fırlatır.

C#, ikili serileştirmeyi (kompakt, yalnızca .NET), XmlSerializer aracılığıyla XML serileştirmeyi, System.Text.Json aracılığıyla JSON serileştirmeyi ve eski web servisleri için SOAP serileştirmeyi destekler.

Serileştirme, bir nesnenin verilerini bir dosyaya veya akışa yazarken, seri durumdan çıkarma ise bu verileri geri okur ve bellekte orijinal nesneyi yeniden oluşturur.

BinaryFormatter artık eski ve güvensiz kabul ediliyor çünkü seri durumdan çıkarma sırasında zararlı kod çalıştırabiliyor. Microsoft Yeni uygulamalar için System.Text.Json veya XmlSerializer'ı önerir.

GitHub Copilot gibi yapay zeka asistanları, Serialize ve Deserialize çağrılarını otomatik olarak tamamlar, [Serializable] özniteliğini ekler ve kısa bir yorumdan JSON veya XML serileştirme kodu oluşturur.

Evet. Yapay zeka destekli araçlar model sınıfları oluşturur, JSON, XML ve ikili formatlar arasında seçim yapar ve hata işleme ekleyerek serileştirme kodunuzun güvenli ve eksiksiz olmasını sağlar.

İkili serileştirme için System.Runtime.Serialization.Formatters.Binary, JSON için System.Text.Json ve XML için System.Xml.Serialization kullanılır.

Bu yazıyı şu şekilde özetleyin: