Delphi Attribute

Bu yazımda Delphi de Attribute kullanımını anlatacağım. Daha önce C# veya Java ile uğraşanlar attribute kavramını bilirler. Fakat bilmeyenler için kısaca açıklayalım; Attribute: özellik, nitelik demektir. Kullanıldıkları yerde ayırt edici, niteleyici, gruplayıcı veya ekstra nitelik kazandırıcı bir etki gösterirler. Delphi de attribute tanımlamak için köşeli parantez operatörleri kullanılır.

Örneğin:
[xml (‘AdSoyad’)]
[donusum (TDonusumEnum.json)]

Not: Attribute’ler TCustomAttribute sınıfından türetilmelidir.
Not: Attribute kavramı Delphi 2010 ve sonra ki sürümlerde mevcuttur.

Şimdi bir örnek ile kendimize özel bir attribute tanımlayalım ve RTTI yardımı ile kullandığımız yerlerde ki değerlerini okuyalım.

Yeni bir proje açın ve yukardaki uPersonel.pas dosyasını projenize ekleyin ardından projenize bir adet TButton ve TMemo nesnesi ekleyin ve alttaki kodları da button1.click event’ına yazın.

Butonu tıkladığınızda TPersonel sınıfının elemanlarının xml ve json formatında çıktılarını göreceksiniz. Bu örnek, Attribute ve RTTI sisteminin nasıl çalıştığını anlatmak için özet bir uygulamaydı. İsteğinize göre geliştirip sınıfı komple json yada xml formatına çeviren parser da yazabilirsiniz.

Ekran çıktısı;

Bu örneği Delphi xe7 versiyonunda yazdım. Delphi 2010 ve sonrasında da sorunsuz çalışacaktır.

Delphi Object To JSON

Delphi ile JSON stringlerini parse etmek için 3. parti araçlar bulunmaktadır (superobject gibi). Bende bugüne kadar superobject yardımı ile JSON strinlerini parse ettim ve uygulamalarım da hep bu yöntemi kullandım. Fakat DBX  kütüphanelerini biraz karıştırdıktan sonra TJSONMarshal ve TJSONUnMarshal sınıfları ile tanıştım. Bu sınıflar yardımı ile çok kısa bir şekilde kendi sınıflarımızı(TObject) JSON strinlerine(TJSONValue) dönüştürebiliyor, JSON strinlerinide tekrar kendi sınıfımızın bir instance’ı haline getirebiliyoruz. Lafı fazla uzatmadan nasıl yapılacağını görelim…

Aşağıdaki örnek uygulamayı Delphi XE3 versiyonunda yazdım. 2010 ve sonrasında JSON sınıfları mevcuttur. 2009 ve alt versiyonlarda test yapmadığım için kesin birşey söyleyemiyorum ama Datasnap işlemleri 2010 ile birlikte geldiğinden dolayı, 2010’un alt sürümlerinde  bu sınıflar olmayabilir.

Uygulamanın ekran çıktısı