XML Serialization – Kodları Sadeleştirmek

Yakın zamanda XML konusunu kapatıp, JSON ve farklı veri dosyalarıyla ilgili bilgiler aktarmaya başlayacağımı umuyorum. 🙂 Ama öncesinde bir okuyucudan gelen soru üzerine yaptığımız örnek hakkında size bilgi vermek istiyorum. Arada sırada işinize yarayabilecek bir şey.

Tam uyumaya hazırlanıyorken, telefonuma bir mail geldi saate baktım 00:53. Önemli bir şey olabilir düşüncesiyle okumaya başladım. Mail’ i İlyas Tavukçu beyefendi yazmış ve teşekkür ettikten sonra bir şeyler sormuş. Sorduğu bilgilerin detayı; Gelir İdaresi Başkanlığının (GİB)‘ nın eFatura projesindeki bilgilerin transferi sırasında kullanılan XML dosyalarının dönüştürülmesi. Basit ve genel olarak; bir birine çok fazla benzeyen iki tane XML dosyası var, bunları daha önceki yazımda yazdığım gibi Paste XML As Classes yaptıktan sonra bir şeyler değiştirildiğinde Deserialization sırasında hatalar alınıyor.

Şimdi sorunu daha iyi anlamak için ufak bir XML örneği paylaşayım.

Örnekte görüleceği gibi aslında ve nodları aslında bir birilerinin birebir aynısı. Bu XML’ i kullanarak bir sınıf oluşturmak istediğimiz zaman Visual Studio 2012 bize aşağıdaki gibi bir sınıf öbeği veriyor.

home ve mobile sınıflarının yanında oluşan, homes ve mobiles sınıfları da birbirinin neredeyse kopyası şeklinde. İlyas Bey’ inde anlatmak istediği aslında tam olarak buydu. Ben sadece tek bir XML dosyası üzerinden örnek verdim. eFatura kısmındaki dosyaları incelemek isterseniz eFatura Mevzuat sayfasındaki eFatura Paketini indirebilirsiniz.

Biz yukarıdaki örnekten devam edelim. Yapmak istediğimiz şey aslında daha az kod yazmamızın yanında daha kolay kullanılabilir yapı sağlamak.

Kod üzerinde biraz oynadıktan sonra yukarıdaki şekli verdim. Önceki kod ile karşılaştırdığınız zaman daha az sınıf olduğunu göreceksiniz. Bu şekilde yukarıdaki XML mesajını objeye aktarabiliyorsunuz.

Peki objeden XML’ e aktarırken bir şey değişti mi? Hemen bakalım. Daha önceki örneklerimizi hatırlarsanız XML’ in kendi namespaceleri dışında bir şey kullanmamıştık, bu sefer farklı olarak özel namespacelerimiz bulunmakta. Bunları nasıl objeden XML’ e aktaracağız sorusunun cevabı aşağıdaki kodun içinde.

Göreceğiniz gibi XML dosyamızdaki gibi bir XML elde edeceksiniz. Burada kullandığımız a, b ve c leri kendi istediğiniz şekilde değiştirebilirsiniz ve bunlar sizin XML dosyanıza yansıyacaktır. İlyas Bey’ in sorduğu soru üzerinden bu şekilde bir yaklaşım kodlarımızı biraz daha toplu ve tekrarı az olacak şekilde kullanabiliriz. İlyas Bey’ e teşekkür ederek yazımı bitiriyorum. Yorumlarınız ve attığınız maillere en hızlı cevabı vermeye çalışıyorum, umarım memnun kalmışsınızdır.

Yorumlayın