2011-11-06 19 views
18

Varolan, kanıtlanmış, mevcut bir C# nesnesini temsil eden bir istemci tarafı javascript nesne modeli hızlı bir şekilde oluşturmak için çözümler arayın. Orada bir T4 şablonu ya da başka bir yaklaşım var sanırım ama onu bulmak için terminolojiden yoksun. Ben varolan bir C# nesnesinin JSON temsilini veya serileştirme ile ilgili bir şey almak için serileştirme hakkında konuşmuyorum. Ben sadece 20+ C# nesneleri için javascript nesne modeli oluşturmak istiyorum ve ben C# kodu değiştiğinde anları bir anda yeniden üretmek mümkün olmak istiyorum. örneğini basitleştirilmiş Aşırıotomatik olarak C# nesnesinden javascript nesne modeli oluşturur

ben aradığım:

C# kodu:

[Serializable()] 
public class Cat 
{ 
    public string Name { get; set; } 
    public string Breed { get; set; } 
} 

nesne modeli oluşturulacak JavaScript:

function Cat() 
{ 
    this.Name = ""; 
    this.Breed = ""; 
} 

@Baszz

JSON veri değişimi için metin tabanlı bir standarttır ve aradığım şey bu değil. Bir javascript dosyasına koyabildiğim ve bu script'i çeşitli web sayfalarına bağlayabilen 20+ nesneden oluşan bir istemci tarafı API'si oluşturmam gerekiyor.

{ "Name": "Hayden", "Breed": "Rabbit” } 

Ama bu aynı şey değildir:

JavaScriptSerializer AC# nesneden aşağıdaki gibi bir dize tükürmek yapabilirsiniz

function Cat() 
{ 
    this.Name = ""; 
    this.Breed = ""; 
} 
  1. JSON dizesi adlandırılmış edilmez işlevi.
  2. Tüm öğeler tırnak içine alınmış ve ihtiyaç duyduğum formata sahip olması için dizgenin elle ayrıştırılmasını gerektiren JSON biçimindedir.
  3. Sen) altına nedeniyle içinde

1 var Mycat = new Cat gibi Cat değil yeni çekim bir örnek (can;

Çok fazla yorum yok, bu yüzden herkesin bunu elle yaptığını veya hiç yapmadığını tahmin ediyorum. C# dosyalarını ayrıştırmak ve istemci tarafındaki API'mimi oluşturmak için kendi T4 şablonumu oluşturmaya bakın.

+0

İlginç bir fikir, insanların cevapları sağlamaya çalışırken yardımcı olabilir. Örneğin, bu nesnelerin ne/nasıl kullanıldığı. –

+1

Merhaba, benzer bir yazıyı düşünürken sorunuzu buldum ve bunu daha genel ve tatmin edici hale getirmeye çalışıp çalışamayacağımızı merak ediyorum. Her ikisi de. İstediğim bu. Entity Framework ve MVC4 ile güzel otomatik testlerle yapılan bir REST API'm var. Şimdi, bu hizmetleri aramak için ly istemciden kullanılacak bir javascript kütüphanesi oluşturmak istiyorum. Javascript'i doğrudan yazmak zorunda kalmamayı, ancak API ve nesne modelinden otomatik olarak oluşturulmamayı seveceğim. Tabii ki, bunun yansıma ile yapılabileceğini biliyorum ve şu an için gideceğim yön budur. Ama bunu yapmak daha iyi olurdu – pabloelustondo

cevap

5

Sayısız aramadan sonra aradığım şeye yakın bir şey bulamadım. Açıkça herkes, son birkaç yılda JSON vızıltı sözcüğüne yakalanmış ve hiç kimse, istemci tarafındaki nesne modellerini otomatik oluşturmuyor. Codesmith ve T4 şablonlarına baktım. Kod dosyalarının ayrıştırılması için yerleşik mekanizmaların hiçbiri yoktur. Her ikisi de, geliştiricilerin omuzlarında% 100'e dayanan özelliklere ve türlerine ulaşmak için yansımayı atlamanızı gerektirir. Codesmith veya T4 şablonları size hangi yararı sağladığına dair tüm yansıma kodlarını yazmanın çemberinden atladıktan sonra sorulan soru hangisi? Kesinlikle bir şey .. Yansıma kodunuzu yeniden kullanılabilir bir sınıf kütüphanesine yerleştirip konsol uygulamasından çağırdığınızı ve yaptığım işin aynısını yaptığınızı düşünebilirsiniz.

0

Ne hakkında konuştuğunuzu anlayabildiğimden emin değilim, ancak Yansıma'yı kullanırsanız, javascript nesnesi için bilgi üretmek için C# kodu hakkında veri alabilirsiniz.

2

Bu eski bir soru ama sen sharp2Js deneyebilirsin. Sınıflarınızı yansıtmak ve birkaç yardımcı fonksiyonla javascript nesneleri oluşturmak için tasarlanmış bir kütüphane.

Verdiğiniz örnek karşı Running (ve aksi bir T4 şablonda ürettiği dize çıktısı ya):

string modelOutput = Castle.Sharp2Js.JsGenerator. 
      GenerateJsModelFromTypeWithDescendants(typeof(Cat), true, "example"); 

üretir:

example = {}; 

example.Cat = function (cons, overrideObj) { 
    if (!overrideObj) { overrideObj = { }; } 
    if (!cons) { cons = { }; } 
    var i, length; 
    this.name = cons.name; 
    this.breed = cons.breed; 


    this.$merge = function (mergeObj) { 
     if (!mergeObj) { mergeObj = { }; } 
     this.name = mergeObj.name; 
     this.breed = mergeObj.breed; 
    } 
} 

orada ekstra meta bazı iskele olduğunu vb miras nesneler davranışı geçersiz kılmak için oluşturma olanağı,

Not koleksiyonları ve karmaşık türlerini desteklemek için: Ben değilim O, sharp2Js'un koruyucusudur ve yeni ve henüz çok şey yapmaz, ama belki de sizinki gibi senaryolar için yardımcı olabilir. Eğer bu yaklaşımla gerçekleştirmek için çalışıyoruz açıklamak durumunda

İlgili konular