Dynamic tipini kullanarak XML, JSON manipülasyonları yapmak


Warning: count(): Parameter must be an array or an object that implements Countable in /home/kazimce1/public_html/wp-content/plugins/microkids-related-posts/microkids-related-posts.php on line 645

Dynamic

Net 4.0 ile hayatımıza giren dynamic tipi ile çeşitli işlemler yapabiliriz. Geçenlerde okuduğum Anoop Madhusudanan’un Bloğunda dynamic tipi ile genişletilmiş ve XML, JSON manipülasyon işlemlerini çok kolay ve dinamik bir biçimde yapan bir projeye rastladım. Çok basit bir kullanımla belirttiğiniz XML yada JSON formatındaki veri kaynağını okuyup istediğiniz manüpülasyonları yapmanıza olanak sağlıyor.

Projenin source kodlarını buradan veya buradan indirebilirsiniz.

Kullanımı ve avantajları ile ilgili örneklerede aşağıdan ulaşabilirsiniz.

1 – Farklı seviyelere sahip dinamik objeleri otomatik olarak oluşturabilirsiniz. ElasticObject sınıfı sayesinde hiyerarşik veri yapılarını çok basit bir şekilde tasarlayıp kullanabilirsiniz.

Örneğin :

dynamic store = new ElasticObject("Store");
store.Name = "Acme Store";
store.Location.Address = "West Avenue, Heaven Street Road, LA";
store.Products.Count = 2;

store.Owner.FirstName = "Jack";
store.Owner.SecondName = "Jack";

2 – Yukarıdaki gibi bir yapıyı oluşturduktan sonra “>” operatörünü kullanarak bu yapıyı XML’e yada JSON formatına çevirebilirsiniz.

ElasticObject sınıfının uygulanışında bazı operatörlerin özel anlamları bulunmaktadır. Örneğin “>” operatörü ElasticObject formatındaki yapınızı belirttiğininz veri formatına (XML,JSON) çevirir.

Örneğimizdeki store objesinin XML olarak çıktısını almak istiyorsak aşağıdaki gibi bir kullanım ile bu işlemi kolayca gerçekleştirebiliriz.

XElement el = store > FormatType.Xml;
Console.WriteLine(el.ToString());

Bu işlem sonucunda oluşan XML veri yapısı aşağıdaki gibi olacaktır.

<Store Name="Acme Store">
<Location Address="West Avenue, Heaven Street Road, LA" />
<Products Count="2">
<Product Name="Acme Floor Cleaner" Price="20" />
<Product Name="Acme Bun" Price="22" />
</Products>
<Owner FirstName="Jack" SecondName="Jack">
this is some internal content for owner
</Owner>
</Store>

3 – XML yada JSON formatından ElasticObject formatına veri yapınızı dönüştürebilirsiniz.

Önceki örnekte dynamic ElasticObject objesinden XML e dönüştürme işlemi yapmıştık. Aslına bakarsanız gerçek hayatta ihtiyacımız XML formatını kullanabileceğimiz dinamik nesnelere dönüştürme işlemi olacaktır. Aşağıda görüleceği üzere bu dönüşüm işlemi DynamicExtensions sınıfındaki XElement.ToElastic() genişletilmiş (extented) metod ile yapılabilmektedir.

public void Check_The_Object_Create_And_Consume_Xml()
{
    var store = CreateStoreObject();
    XElement el = store > FormatType.Xml;
    dynamic storeClone = el.ToElastic();
    XElement elCopy = storeClone > FormatType.Xml;
    Assert.AreEqual(el.ToString(), elCopy.ToString());
}

4 – Birden fazla elementi aynı isimle alt (child) element olarak eklebilirsiniz.

Birden ürününüz olduğunu ve bunları veri yapınıza eklemek istediğinizi düşünelim. Böyle bir ihtiyacı aşağıdaki şekilde basit bir şekilde dinamik olarak oluşturabiliriz.

dynamic store = new ElasticObject("Store");
store.Name = "Acme Store";
store.Location.Address = "West Avenue, Heaven Street Road, LA";
store.Products.Count = 2;

store.Owner.FirstName = "Jack";
store.Owner.SecondName = "Jack";

// elementin içeriğine ekle
store.Owner <<= "this is some internal content for owner";

// ürün ekle
var p1 = store.Products.Product();
p1.Name = "Acme Floor Cleaner";
p1.Price = 20;

// başka bir ürün ekle
var p2 = store.Products.Product();
p2.Name = "Acme Bun";
p2.Price = 22;

Yukarıdaki ifadenin XML olarak çıktısı aşağıdaki gibi olacaktır :

<Store Name="Acme Store">
  <Location Address="West Avenue, Heaven Street Road, LA" />
  <Products Count="2">
    <Product Name="Acme Floor Cleaner" Price="20" />
    <Product Name="Acme Bun" Price="22" />
  </Products>
  <Owner FirstName="Jack" SecondName="Jack">
    this is some internal content for owner
  </Owner>
</Store>

Dikkat edileceği üzere “<

Kullanımı ile ilgili daha fazla örneği içeren yazarın sitesi aşağıdaki gibidir.

Kaynak;

Introducing ElasticObject implemented using .NET 4.0 dynamic features

0 thoughts on “Dynamic tipini kullanarak XML, JSON manipülasyonları yapmak”

Bir cevap yazın