2013-02-01 15 views
6

Şu anda bir .NET C# API oluşturuyorum. Pek çok dersim var ve bazılarının hizmetini JSON olarak aktarması gerekiyor. Örneğin, iş meta-veri bir çok bir hesap nesne olabilir:İş Nesnesi Sınıfları'ndan DataContract sınıflarını otomatik oluşturma

birçok sınıfları ve ( ComplicatedClass tipi özelliği gösterdiği gibi) iç içe çok daha fazla var
public class Account 
{ 
    public ComplicatedClass SomeProperty { get; set; } 
    public string SomeOtherProperty { get; set; } 
} 

.

public class AccountDTOForJSON 
{ 
    [DataMember(Name="someProperty")] 
    public ComplicatedClassDTOForJson SomeProperty { get; set; } 

    [DataMember(Name="someOtherProperty")] 
    public string SomeOtherProperty { get; set; } 
} 

Benim sorunum, (herhangi bir alet olarak görünmüyor edilir: bu sınıf bir karmaşa yapacak [DataMember] vb Öznitelikler'in ile bu iş nesnesi inundating önlemek için, bir DTOJSON için yapmak istiyorum Bu DataContract sınıflarını otomatik olarak oluşturmak ve aynı zamanda özellikleri ileri/geri haritalama için kod sağlamak için bulabiliriz.

Elbette, tüm bu işi el ile yapın (en kötü durum) veya kendi aracımı oluşturmak/harita oluşturmak (ikinci kötü durum). Ama, önce kendimi zaman kazanmak için kullanabileceğim bir şey yapmak için bir araç varsa, bilmek isterim.

cevap

2

Bu iyi bir soru. Aslında üzerinde çalıştığım bir projede buna benzer bir şey yapacağım.

Burada gerçekten iki sorun olduğunu öneriyorum: ilki iş nesnelerinizden DTO kodu oluşturmak, ikincisi ise iş nesnesi ile DTO arasındaki eşlemeyi yapmak.

Bu amaçla, Google'da yaklaşık yarım saat geçirdikten sonra kod üreticisi bulunamadı. Belki de doğru olanı aramıyorum ya da muhtemelen orada kimse yok (eğer birisi bir tanesini biliyorsa, lütfen chime). Umut verici görünen tek araç NHydrate (http://www.codeproject.com/Articles/42885/NHydrate-Code-Generator), ama aslında indirmedim veya test etmedim. Ben geçmişte kullandığınız

Bir haritalama aracı AutoMapper (https://github.com/AutoMapper/AutoMapper/wiki/Getting-started) - bu iş nesneleri ve DTOs arasındaki ilişkiyi anlamaya çalışacaktır, ve iki yönlü haritalama yapmak mümkün olacak.

+0

Teşekkürler! Bu işe karışan tek kişi olmadığına sevindim .. Ben de bir şey bulamıyorum. Konuştuğunuz AutoMapper'ı buldum, ama jeneratörü yuvarlamak zorundaymışım gibi hissediyorum, kendimi de kendi haritalamamı da çekebilirim .. Bu konuda henüz kimsenin haberi olmayan çok garip .. – automaton

+0

evet iyi olurdu C# veri sözleşmesi kodunu gösterebilirse çevrimiçi json ayrıştırıcısı http://json.parser.online.fr/ gibi bir araç da - DataMembers'i oluşturma görevini yerine getirmemde bana yardımcı olması için çevrimiçi json ayrıştırıcısını kullandım - sıkıcı iş ve basit bir çözümleyici yapmak mümkün olmalıdır – serup

1

Ben tarafından daha önce yaptım:

  1. derlenmiş DTO aksamından şemaları oluşturmak için XSD aracını kullanın. adımda oluşturulan .xsd gelen DataContracts oluşturmak için
  2. Kullanım svcutil 1.


Düzenleme:

yukarıdaki Account sınıf yalnızca endikasyon beri DTO (olduğunu varsayar olduğunu size Örneğinizde verdiğiniz, iki özellik içermesiydi, bu yüzden sadece durumu transfer etmek ve davranışı tanımlamak için kullanılmadığını varsayardım). Durum buysa ve Hesap sınıfının DataContract sürümünü istiyorsanız, yukarıdakiler çalışmalıdır. Hala Account sınıfını seri hale getirilebilir Account sınıfına (svcutil tarafından oluşturulmuş) eşlemek için kod sağlamanız gerekir.

+0

Ben kaçırmak anlaşılan düşünüyorum. Tek sahip olduğum İş Nesneleri. – automaton

0

İşte tam olarak ihtiyaçlarınız için geliştirdiğim bir araçtır. Gerekirse ayarları çatallandırabilir ve değiştirebilirsiniz.ben oluşturmak istediğim şey .. ben ** herhangi ** DTO dosyaları oluşturulur var henüz yok -

https://github.com/lasuax/ClassToDataContract

İlgili konular