kralhakan2009 1
kralhakan2009
Vahsi Uzman 1
Vahsi Uzman
farkmt2official 1
farkmt2official
Bvural41 1
Bvural41
noisiv 1
noisiv
Manwe Work 1
Manwe Work
Hikaye Ekle

Altın Konu .Net CORE 3 ile JSON İşlemleri Nasıl Yapılır ?

  • Konuyu başlatan Konuyu başlatan lHezarfeNl
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 2
  • Görüntüleme Görüntüleme 212

Ayyıldız2 | 2008 TR Yapısı • 1-99 Orta Emek Destan • Oto Avsız • 10 Temmuz 21:00 HEMEN TIKLA!

1.jpg

.Net Core 3'ün çıkmasına az bir zaman kala Microsoft tarafından duyurulan JSON işlemleri için bir kütüphane oluşturulduğu belirtildi. Bu kütüphane ile birlikte JSON oluşturma, serialize/deserialize, dosya okuma/yazma ve DOM işlemlerini ekstra bir kütüphane kurmadan yapabileceğiz. JSON işlemlerinde kullanılan en yayın ve popüler dağıtımlardan biri olan 'a göre de daha performanslı çalıştığı makalede belirtilmiş.

Şu an Nuget store'da prerelease aşamasında yer alan "System.Text.Json" paketini, .Net Core 3'ün final versiyonuna entegre olarak ekstra bir kurulum yapmadan kullanılabilir olması planlanmakta.

Özelliklere hızlıca göz atmak isterseniz sisteminizde aşağıdakilerin kurulu olması gerekmekte;

.Net Core 3 ile JSON İşlemlerini Yapmak​

Visual Studio 2019 kullanarak, yeni bir Console uygulaması oluşturalım.
1709715566092.png

Oluşturacağımız projeye "CoreJsonProjesi" ismini verdim.
1709715578710.png

Kurulacağı yeri de belirttikten sonra projeyi oluşturuyoruz.

Projenin özelliklerine girdiğimizde, projede kullanılan .Net Core versiyonunun "Target Framework" altında ".Net Core 3.0" olduğundan emin olun.
1709715589824.png

JSON işlemlerini yapacağımız kütüphaneyi yüklemek için, Nuget Package Manager'i açıp, "System.Text.Json" yazarak indirelim. Arama işlemini yaparken arama kutusunun yanında yer alan "Include prerelease" kutusunun işaretli olduğundan emin olalım.
1709715603475.png

JSON Serialize Kullanımı

Projemize aşağıdaki gibi Ogrenci isminde bir sınıf(class) ekleyelim.
Kod:
public class Ogrenci
{
    public string Ad { get; set; }
    public string Soyad { get; set; }
    public int No { get; set; }
    public double Ortalama { get; set; }
}
Projemizde Program.cs içerisinde yer alan Main metodu içerisine aşağıdaki gibi örnek bir öğrenci ekleyelim.
Kod:
var yeniOgrenci = new Ogrenci
            {
                Ad = "Yiğit",
                Soyad = "Nuhuz",
                No = 320,
                Ortalama = 50
            };
Elimizdeki modeli, metin olarak çevirmek için öncelikle Program.cs içerisine indirdiğimiz kütüphaneyi ekliyoruz.
Kod:
using System.Text.Json.Serialization;
Ardından Main içerisine aşağıdaki kod bloğunu ekleyip modelimizin string olarak JSON karşılığını alıyoruz.
Kod:
var json = JsonSerializer.ToString<Ogrenci>(yeniOgrenci);
Ardından oluşan sonucu ekrana yazdırabiliriz.
Kod:
Console.WriteLine(json);
Programımızı çalıştırdığımızda aşağıdaki sonucu alacaksınız.
Kod:
{"Ad":"Yigit","Soyad":"Nuhuz","No":320,"Ortalama":50}
1709715674868.png

Serialize işlemini yaparken kullanabileceğimiz bazı özellikler de yer almakta. Mesela ekrana bastığımız değeri daha okunaklı bir hale getirmek için aşağıdaki gibi bir özellik tanımlayalım ve dönüşüm işlemi yapılırken bu özelliği de kullanalım.
Kod:
var options = new JsonSerializerOptions
        {
            WriteIndented = true
        };
 
        var json = JsonSerializer.ToString<Ogrenci>(yeniOgrenci,options);
Uygulamayı tekrar çalıştırdığımızda aşağıdaki gibi daha okunaklı bir JSON göreceğiz.
1709715703322.png

Tüm bu işlemlerin ardından Main metodumuz aşağıdaki gibi olacaktır.
Kod:
tatic void Main(string[] args)
 {
     var yeniOgrenci = new Ogrenci
     {
         Ad = "Yigit",
         Soyad = "Nuhuz",
         No = 320,
         Ortalama = 50
     };
 
     var options = new JsonSerializerOptions
     {
         WriteIndented = true
     };
 
     var json = JsonSerializer.ToString<Ogrenci>(yeniOgrenci,options);
 
     Console.WriteLine(json);
 }

JSON Deserialize Kullanımı

JSON metinlerini kendi oluşturduğumuz modellere dönüştürebiliriz. Bunun için öncelikle bir öğrenci JSON'ı tanımlayalım.
Kod:
var json = "{\"Ad\":\"Yigit\",\"Soyad\":\"Nuhuz\",\"No\":320,\"Ortalama\":50}";
JsonSerializer'ın Parse özelliğini kullanarak elimizdeki JSON'ı modele dönüştürelim.
Kod:
var yeniOgrenci = JsonSerializer.Parse<Ogrenci>(json);
Modelimiz içerisinde yer alan öğrenci bilgilerini ekranda gösterelim.
Kod:
Console.WriteLine($"Öğrenci adı:{yeniOgrenci.Ad}");
Console.WriteLine($"Öğrenci soyadı:{yeniOgrenci.Soyad}");
Console.WriteLine($"Öğrenci numarası:{yeniOgrenci.No}");
Console.WriteLine($"Öğrenci ortalaması:{yeniOgrenci.Ortalama}");
1709715753939.png

Kod:
static void Main(string[] args)
{
    var json = "{\"Ad\":\"Yigit\",\"Soyad\":\"Nuhuz\",\"No\":320,\"Ortalama\":50}";
 
    var yeniOgrenci = JsonSerializer.Parse<Ogrenci>(json);
 
    Console.WriteLine($"Öğrenci adı:{yeniOgrenci.Ad}");
    Console.WriteLine($"Öğrenci soyadı:{yeniOgrenci.Soyad}");
    Console.WriteLine($"Öğrenci numarası:{yeniOgrenci.No}");
    Console.WriteLine($"Öğrenci ortalaması:{yeniOgrenci.Ortalama}");
}
Dönüştürülmenin yapılacağı modele çeşitli özellikler de tanımlayabiliriz.

JSON dönüşümlerinde aksi belirtilmedikçe gelen verilerin isimleri ile modelimizdeki değişkenlerin isimleri aynı olması gerekmekte. Fakat bizim örnek modelimizde yer alan "No" değişkeninin içini JSON içerisinde gelen "Numara" alanından almak istersek, modelimize aşağıdaki eklemeyi yapmamız gerekmekte.


Kod:
[JsonPropertyName("Numara")]
public int No { get; set; }
Yukarıdaki eklemeyi Ogrenci sınıfımıza yaptıktan sonra Main metodumuzu da aşağıdaki gibi değiştirip çalıştırdığımızda yine aynı sonucu göreceğiz.
Kod:
static void Main(string[] args)
{
    var json = "{\"Ad\":\"Yigit\",\"Soyad\":\"Nuhuz\",\"Numara\":320,\"Ortalama\":50}";
    var yeniOgrenci = JsonSerializer.Parse<Ogrenci>(json);
 
    Console.WriteLine($"Öğrenci adı:{yeniOgrenci.Ad}");
    Console.WriteLine($"Öğrenci soyadı:{yeniOgrenci.Soyad}");
    Console.WriteLine($"Öğrenci numarası:{yeniOgrenci.No}");
    Console.WriteLine($"Öğrenci ortalaması:{yeniOgrenci.Ortalama}");
}
1709715790605.png

Dönüştürme işlemlerinde bazı alanlarda gelen veriyi almak yerine kendimizin vereceği değeri kullanmasını isteyebiliriz. Bunun için yine kendi modelimizde Ortalama değerine aşağıdaki eklemeyi yapıp, JSON'dan gelen değeri almamasını sağlayalım.


Kod:
[JsonIgnore]
public double Ortalama { get; set; }
Ardından Main metodumuzu aşağıdaki gibi değiştirelim.
Kod:
static void Main(string[] args)
 {
     var json = "{\"Ad\":\"Yigit\",\"Soyad\":\"Nuhuz\",\"Numara\":320,\"Ortalama\":50}";
     var yeniOgrenci = JsonSerializer.Parse<Ogrenci>(json);
 
     Console.WriteLine($"Öğrenci ortalaması:{yeniOgrenci.Ortalama}");
 
     yeniOgrenci.Ortalama = 100;
 
     Console.WriteLine($"Öğrenci ortalaması:{yeniOgrenci.Ortalama}");
 }
Böylelikte, önce modelimizdeki ilk değeri ardından da bizim atadığımız değeri ekrana gösterdik.

1709715828545.png


Gördüğünüz gibi ilk olarak Ortalama değeri JSON içerisinde "50" vermemize rağmen "0" olarak "int" tipinin varsayılan değerini aldı. Ardından bizim atadığımız "100" değerini verdi.

JSON Writer Kullanımı

Kendi oluşturacağımız JSON'ı kayıt etmek için öncelikle projemize aşağıdaki eklemeleri yapıyoruz.

Kod:
using System.IO;
using System.Text;
Ardından Main metodumuzu aşağıdaki gibi düzenliyoruz.
Kod:
static void Main(string[] args)
      {
          using (var memoryStream = new MemoryStream())
          {
              using (var jsonWriter = new Utf8JsonWriter(memoryStream))
              {
                  jsonWriter.WriteStartObject();
                  jsonWriter.WriteString("Ad", "Yigit");
                  jsonWriter.WriteString("Soyad", "Nuhuz");
                  jsonWriter.WriteNumber("No", 320);
                  jsonWriter.WriteNumber("Ortalama", 50.5);
                  jsonWriter.WriteEndObject();
              }
 
              FileStream file = new FileStream("YeniOgrenci.txt", FileMode.Create, FileAccess.Write);
              memoryStream.WriteTo(file);
              file.Close();
 
              string json = Encoding.UTF8.GetString(memoryStream.ToArray());
              Console.WriteLine(json);
          }
      }
Kısada kodu açıklamak gerekir uygulama akışında kullanacağımız bir MemoryStream oluşturuyoruz. Bu sayede bellekte veri geçici veri depolayabileceğimiz bir alan oluşturuyoruz. RAM'i kullandığı için diski kullanmaktan daha performanslıdır ve geçici veri depolama işlemlerinde tercih edilir. MemoryStream'i oluşturduktan sonra onun içerisinde kullanacağımız Utf8JsonWriter tanımlıyoruz. Bu özellik de "System.Text.Json" ile beraber gelmekte ve JSON verileri oluşturmamızı sağlar. Ardından JSON içerisinde tutacağımız verileri hafızada ayırdığımız yere yazıyoruz.

FileStream ile oluşturduğumuz veriyi yazacağımız bir dosya tanımlıyoruz. "YeniOgrenci.txt" ile dosyamızın adını ve uzantısını tanımlıyoruz. Dosya adının başına herhangi bir dosya yolu vermediğimiz için varsayılan olarak projemizin içerisindeki "bin\Debug\netcoreapp3.0" içerisine oluşturacaktır. Farklı bir dosya yoluna kayıt etmek isterseniz dosya ismini başına kaydetmek istediğiniz dosya yolunu yazabilirsiniz.

Dosyayı oluşturup kaydettikten sonra son olarak hafızadaki verimizi bir string'e dönüştürüp ekrana yazıyoruz.

Projeyi çalıştırdığımızda aşağıdaki gibi hem json'ı console'da hem de txt içerisinde göreceksiniz.
kvb6o3n.png

Sonuç olarak, yıllardır Nuget mağazasında en yaygın kullanılan kütüphanelerden biri olan Newtonsoft.Json'a karşı yapılan bu yenilik geliştiriciler tarafından ne kadar tercih edilecek göreceğiz fakat yapılan performans testlerindeki hız artışı ve 3. parti kütüphane bağımlılığını azaltması bir çok projede tercih edilmesini sağlayacaktır.
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst