Arama:
JSON Objelerini C# dilinde Class ve Listlere Dönüştürme

Tüm yazılımcı dostlarıma selamlar. Bu gün günlük hayatta XML yapıları sonrasında gelişen haberleşme teknolojileri arasında bulunan JSON Objelerinin nasıl c# dilinde kullanılacağını göstereceğiz. Bu yazıya başlamadan önce dilerseniz JSON nedir bundan bahsedelim

JSON (JavaScript Object Notation), basit veri yapılarını temsil etmek için tasarlanmış bağımsız bir veri değişim formatıdır. Esas olarak iki sistem arasındaki veri alışverişi için kullanılır. Örneğin JSON kullanarak sunucu ile web uygulaması arasında veri aktarabilirsiniz. JSON Dosyalarını genellikle birden fazla yazılım dilinde kullanabilir. Gelelim c# dilinde bu JSON dosyalarını nasıl kullabileceğimize…

Herhangi bir sayfaya HTTP Post isteği yaptığımızda genellikle bu aşağıdaki gibi geri dönüş alırız

 

{
"status": true,
"version": "2.0.3",
"expires": "1551829009.0"
}

Bu tipte karşımıza çıkan basit bir Post Requestinde aşağıdaki gibi bir class hazırlamamız ilk planda işimizi görecektir.

public class DataRequest
{
   public bool Status {get;set;}
   public string Version {get;set;}
   public TimeSpan Expires {get;set;}
}

Hazırlamış olduğumuz bu classı dolduracak metoda geçmeden önce bazı durumlarda json property içerisine bizlere aşağıdaki gibi “_” veya boşluk içeren bilgiler de gelebilir. "status_code" kısmında olduğu gibi

{
"status": true,
"version": "2.0.3",
"status_code": 200,
"expires": "1551829009.0"
}

Bu tip durumlar için clasımızın üst kısmına “JsonProperty” açarak istediğimiz isimde nitelendirebiliriz. Aynı classımız üzerinden Örnek vermek gerekirse

public class DataRequest
{
public bool Status {get;set;}
public string Version {get;set;}
[JsonProperty("status_code")]
public int StatusCode {get;set;}
public TimeSpan Expires {get;set;}
}

Bu yapıdaki örnekleri çoğaltabiliriz. Burada önemli olan nokta kodun nasıl işlediğini kavramaktır. Şimdi işleri biraz daha ileriye taşıma zamanı. Örneğimiz üzerinden hareketle gelen JSON dosyası içerisine bir alt kısım daha oluşturalım

{
"status": true,
"version": "2.0.3",
"status_code": 200,
"expires": "1551829009.0",
"players":
   {
      "k_yigit": {
            "seasonal_role": "admin",
             "fullname": "Kaan YİĞİT",
             "name": "Kaan"
             },
      "m_beyaz": {
            "seasonal_role": "admin",
            "fullname": "Mustafa BEYAZ",
            "name": "Mustafa"
             },

      }
}

Yeni yapımızda karşımıza “players” isminde bir property çıkarak oyuncuların bilgilerini de bizlere ileten LİSTE olduğu gözlemlenmektedir. Bu tip durumlar için Oyunculara özel bir class üretmemiz gerekecektir.

public class Player
{
public string Id { get; set; }
[JsonProperty("seasonal_role")]
public string SeasonalRole { get; set; }
public string Fullname { get; set; }
public string Name { get; set; }
}

Üretilen bu yeni player classımız birden fazla öğe barındıracağından dolayı “DataRequest” isimli classımızda List şeklinde tanımlama yapacağız.

public class DataRequest
{
public bool Status {get;set;}
public string Version {get;set;}
[JsonProperty("status_code")]
public int StatusCode {get;set;}
public TimeSpan Expires {get;set;}
public List<Player> Player {get;set;}
}

Bu aşamadan sonra yapmanız gereken tek şey class’ımıza json dosyasını göndermektir. Bu aşamada ise örnek kod

string jsonArray = "Gönderilecek JSON Dosyası yada adresi";

var DataRequestList= JsonConvert.DeserializeObject<List<DataRequest>>(jsonArray);

Newtonsoft Json ile çok daha pratik ve az maliyetli bir çözüm üretmek isterseniz aşağıdaki kod bloğunu inceleyebilirsiniz.

public class PlayersConverter : JsonConverter
{
 // Bu metod ile Json Dosyasına istediğiniz türde veriler yazabilirsiniz
 public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
  {
    writer.WriteStartArray();
    foreach (var player in (List) value)
    {
      writer.WriteRawValue(JsonConvert.SerializeObject(player));
    }
    writer.WriteEndArray();
  }

// Bu metod ile JSON dosyası okuması yapabilirsiniz.
public override object ReadJson(JsonReader reader, Type objectType, object existingValue,
JsonSerializer serializer)
{
var response = new List();
// Loading the JSON object
JObject players = JObject.Load(reader);
// Looping through all the properties. C# treats it as key value pair
foreach (var player in players)
{
// Finally I'm deserializing the value into an actual Player object
var p = JsonConvert.DeserializeObject(player.Value.ToString());
// Also using the key as the player Id
p.Id = player.Key;
response.Add(p);
}

return response;
}

public override bool CanConvert(Type objectType) => objectType == typeof(List);
}
 

Bu oluşturduğunuz metodu ise “typeof” kullanımı ile direk classımıza aktarabilirsiniz. Bunun için clasımızın son hali ise aşağıdaki gibi olacaktır.

public class DataRequest
{
public bool Status {get;set;}
public string Version {get;set;}
[JsonProperty("status_code")]
public int StatusCode {get;set;}
public TimeSpan Expires {get;set;}
[JsonConverter(typeof(PlayersConverter))]
public List Player {get;set;}
}

JSON Dosyalarınızı nasıl classlayabileceğinize tam olarak emin olmadıysanız yada başka örnekler de kullanmak isterseniz json2csharp.com benzeri online uygulamalardan da faydalanabilirsiniz

AngularJS’de Temel Yapılar Nelerdir?

AngularJS’yi kullanmak istediğimizde mevcut sayfaya aşağıda örnekte olduğu gibi kaynak dosyayı head tagleri arasına entegre etmemiz gerekmektedir.

 

<!DOCTYPE html>
<html>
<head>
    <script src="~/Scripts/angular.min.js"></script>
</head>
<body>
</body>
</html>

AngularJS genel olarak aşağıdaki direktiflerden oluşmaktadır. Bu direktifler div veya span tagleri arasında kullanılabilmektedir. Direktifler AngularJS için temel teşkil edecektir. Bu beş direktif;

1- ng-app
ng-app yönergesi; AngularJS’nin hangi blokta kullanacağını belirtmektedir. Bu blok <div> gibi <span> gibi vs. herhangi bir html etiketi olabilir. Örnek Kod ise

 

<!DOCTYPE html>
<html>
<head>
    <script src="~/Scripts/angular.min.js"></script>
</head>
<body> 
<div ng-app="">
        <!-- Burada AngularJS kullanılabilir. -->
</div>
<div>
        <!-- Burada AngularJS kullanılamaz. -->
</div>
</body>
</html>

ng-app ayrıca head tagı öncesinde de kullanılabilir. Bu türlü kullanımda tüm sayfada kullanılacağını göstermiş oluruz Örneğin :

<!DOCTYPE html>
<html ng-app="">
<head>
    <script src="~/Scripts/angular.min.js"></script>
</head>
<body>
</body>
</html>

2-ng-init
ng-init yönergesi; bir element üzerinden değişken, sınıf, dizi vs. tanımlamamızı sağlayan bir direktiftir.

<!DOCTYPE html>
<html ng-app="">
<head>
    <script src="~/Scripts/angular.min.js"></script>
</head>
<body> 
<div ng-init="k">
</div>
</body>
</html>

 

Burada “k” adında bir değişken tanımlanmıştır. Tanımlanan bu değişkene tanımlama aşamasında bir varsayılan değer atanmamıştır. Eğer atamak istiyorsak bunu “=(assign)” operatörüyle aşağıdaki gibi gerçekleştirebiliriz.

<!DOCTYPE html>
<html ng-app="">
<head>
    <script src="~/Scripts/angular.min.js"></script>
</head>
<body>   
<div ng-init="k=3">
</div>
</body>
</html>

Sınıf (Class) Oluşturmak İçin

<!DOCTYPE html>
<html ng-app="">
<head>
    <script src="~/Scripts/angular.min.js"></script>
</head>
<body>
<div ng-init="Sinif={a,b,c}">
</div>
</body>
</html>

Burada “Sinif” isminde bir sınıf oluşturulmuştur ve “=” operatörüyle “{}” scopelar eşliğinde içerisine “a”, “b” ve “c” isimlerinde propertyler yerleştirilmiştir. Burada dikkat edilmesi gereken husus propertyler “,(virgül)” ile ayrılmalıdır. Ayrıca bu kullanımda propertylere oluşturulma anında bir varsayılan değer atanmamıştır.

Eğer ki sınıf içerisindeki propertylere varsayılan değerlerini vermek istiyorsak aşağıdaki gibi “:” operatörüyle bu işlemi gerçekleştirebiliriz.Örneğin :

<!DOCTYPE html>
<html ng-app="">
<head>
    <script src="~/Scripts/angular.min.js"></script>
</head>
<body>    
<div ng-init="Sinif={a:5,b:'Kaan',c:true}">
</div>
</body>
</html>

Dizi Oluşturmak İçin

Aşağıdaki kod bloğunu incelerseniz eğer “Sehir” isminde bir dizi oluşturulmuştur. Burada dikkat etmeniz gereken nokta ifadeyi “Sehir={}” şeklinde kullansaydık bu bir sınıf olacaktı. Lakin “Sehir=[]” şeklinde bir syntax bir dizi yapısını ifade etmektedir. Dizinin içerisine “,” ile elemanları belirtmekteyiz.

<!DOCTYPE html>
<html ng-app="">
<head>
    <script src="~/Scripts/angular.min.js"></script>
</head>
<body>
    <div ng-init="Sehir=['Istanbul', 'Ankara', 'Izmir']">
    </div>
</body>
</html>
AngularJS Nedir?

Günümüzde kullanılan web programlama teknolojilerinden biri olan ANGULAR yapısı Google tarafından JavaScript kullanılarak geliştirilmiş bir frameworktür. MVW altyapısında tasarlanmış bir mimaridir.

 

AngularJS’nin Avantajları Nelerdir?

  • Dependency Injection(Bağımlılık Enjeksiyonu)
    Aslında bir tasarım deseni olan ve hatta Dependency Inversion ile prensip haline(SOLİD) gelen Depedency Injection, programatik olarak bağımlılıkları minimize etmeyi ve yönetmeyi hedeflemektedir.AngularJS, bağımlılık enjeksiyonunu fıtratında barındırmakta ve rahatça bu işlemi gerçekleştirmektedir.
  • Two Way Data Binding(İki Yönlü Veri Bağlama)
    AngularJS’in en güçlü ve etkili özelliklerinden birisidir diyebiliriz. Model ve View arasında eşzamanlı bir etkileşim kurar. Modelde bir değişiklik olduğu an bunu Viewdeki ilgili alana yansıtır. Aynı şekilde tam tersi geçerli olduğunda yani viewde oluşan bir değişiklik anında model üzerinde de kendini gösterecektir.
  • Test Edilebilirlik
    AngularJS uygulamalara kolayca test yazmamızı sağlamaktadır.

AngularJS’yi Kullanabilmek İçin Ne Yapmak Gerekiyor?

Tabi ki de frameworkü elde edip projeye entegre etmeniz gerekmektedir. Bunun için https://angularjs.org/ adresinden ilgili frameworkü elde edip kullanabilirsiniz.

İşte gördüğünüz gibi AngularJS teoride bu çerçevede değerlendirilebilir bir kütüphanedir.