2011-11-06 19 views
18

से जावास्क्रिप्ट ऑब्जेक्ट मॉडल जेनरेट करता है, क्लाइंट-साइड जावास्क्रिप्ट ऑब्जेक्ट मॉडल जो मौजूदा C# ऑब्जेक्ट का प्रतिनिधित्व करता है, को जल्दी से उत्पन्न करने के लिए मौजूदा, सिद्ध, समाधान की तलाश में है। मुझे कल्पना है कि वहां एक टी 4 टेम्पलेट या कुछ अन्य दृष्टिकोण है लेकिन मुझे इसे खोजने के लिए शब्दावली की कमी है। मैं मौजूदा सी # ऑब्जेक्ट उदाहरण या deserialization के साथ कुछ भी करने के लिए JSON प्रतिनिधित्व प्राप्त करने के लिए serialization के बारे में बात नहीं कर रहा हूँ। मैं बस 20+ सी # ऑब्जेक्ट्स के लिए जावास्क्रिप्ट ऑब्जेक्ट मॉडल उत्पन्न करना चाहता हूं और यदि सी # कोड बदलता है तो मैं उन्हें एक पल नोटिस पर फिर से उत्पन्न करने में सक्षम होना चाहता हूं।स्वचालित रूप से C# ऑब्जेक्ट

का उदाहरण अति सरल है कि मैं क्या तलाश कर रहा हूँ:

सी # कोड:

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

जावास्क्रिप्ट ऑब्जेक्ट मॉडल उत्पन्न हो रहे हैं:

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

@Baszz

JSON डेटा इंटरचेंज के लिए एक टेक्स्ट-आधारित मानक है और यह वह नहीं है जिसे मैं ढूंढ रहा हूं। मुझे 20+ ऑब्जेक्ट्स का क्लाइंट-साइड एपीआई जेनरेट करने की आवश्यकता है जिसे मैं जावास्क्रिप्ट फ़ाइल में डाल सकता हूं और उस स्क्रिप्ट को अपने विभिन्न वेब पृष्ठों से लिंक कर सकता हूं।

JavaScriptSerializer एसी # वस्तु से नीचे इस तरह की स्ट्रिंग थूक से बाहर कर सकते हैं:

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

लेकिन यह एक ही बात के रूप में नहीं है:

function Cat() 
{ 
    this.Name = ""; 
    this.Breed = ""; 
} 
  1. JSON स्ट्रिंग एक नाम नहीं है समारोह।
  2. सभी तत्वों को उद्धृत किया गया है और जेएसओएन प्रारूप में स्ट्रिंग के मैन्युअल पार्सिंग की आवश्यकता होगी ताकि इसे मुझे आवश्यक स्वरूप में प्राप्त किया जा सके।
  3. आप नहीं नई-अप एक नीचे # वजह से 1

वर myCat = नई बिल्ली की तरह बिल्ली के कहने() कर सकते हैं,

बहुत सारी टिप्पणियां नहीं हैं इसलिए मैं अनुमान लगा रहा हूं कि हर कोई इसे हाथ से करता है या नहीं। सी # फाइलों को पार्स करने और मेरे क्लाइंट-साइड एपीआई उत्पन्न करने के लिए अपना स्वयं का टी 4 टेम्पलेट बनाना चाहते हैं।

+0

दिलचस्प विचार, यदि आप इस दृष्टिकोण से पूरा करने की कोशिश कर रहे हैं तो आप उत्तर देने का प्रयास करने में लोगों की सहायता कर सकते हैं। उदाहरण के लिए, इन वस्तुओं का क्या उपयोग किया जा रहा है। –

+1

नमस्ते, मुझे एक प्रश्न लिखने के बारे में सोचते समय आपका प्रश्न मिला और मुझे आश्चर्य है कि क्या हम इसे और अधिक सामान्य और संतुष्ट करने का प्रयास कर सकते हैं। दोनों। यह वही चीज है जो मैं चाहता हूं। मेरे पास एक पूर्ण स्वचालित परीक्षण के साथ एंटिटी फ्रेमवर्क और एमवीसी 4 के साथ एक आरईएसटी एपीआई है। अब, मैं एक जावास्क्रिप्ट लाइब्रेरी बनाना चाहता हूं जिसका उपयोग लाइ क्लाइंट से इन सेवाओं को कॉल करने के लिए किया जाएगा। मैं सीधे जावास्क्रिप्ट लिखना नहीं चाहता लेकिन एपीआई और ऑब्जेक्ट मॉडल से स्वचालित रूप से जेनरेट करने का आनंद उठाऊंगा। बेशक, मुझे पता है कि यह प्रतिबिंब के साथ किया जा सकता है और यह वह दिशा है जिसे मैं अभी जा सकता हूं। लेकिन, यह खोजना बेहतर होगा – pabloelustondo

उत्तर

5

अनगिनत खोजों के बाद मुझे जो कुछ भी मिल रहा है उसके करीब कुछ भी नहीं मिला। जाहिर है कि पिछले कुछ वर्षों में जेएसओएन बज़ शब्द में सभी को पकड़ा गया है और कोई भी ऑटो-जनरेटिंग क्लाइंट-साइड ऑब्जेक्ट मॉडल नहीं है। मैंने कोडेस्मिथ और टी 4 टेम्पलेट्स पर देखा। कोड फ़ाइलों को पार्स करने के लिए तंत्र में कोई भी अंतर्निहित तंत्र नहीं है। दोनों को आपको गुणों और उनके प्रकारों को प्राप्त करने के लिए प्रतिबिंब में कूदने की आवश्यकता होती है जो डेवलपर्स कंधों पर 100% शेष है। एक बार जब आप लिखने के उस उछाल के माध्यम से कूदते हैं तो प्रश्न पूछता है कि सभी प्रतिबिंब कोड कोडेस्मिथ या टी 4 टेम्पलेट्स आपको क्या लाभ देता है? बिलकुल कुछ भी नहीं .. आप अपने प्रतिबिंब कोड को पुनः उपयोग करने योग्य कक्षा पुस्तकालय में भी ध्यान में रखते हैं और इसे कंसोल एप्लिकेशन से कॉल करते हैं और यह वही है जो मैंने किया है।

0

मुझे यकीन नहीं है कि मैं समझ सकता हूं कि आप किस बारे में बात कर रहे हैं, लेकिन यदि आप प्रतिबिंब का उपयोग करते हैं तो आप जावास्क्रिप्ट ऑब्जेक्ट के लिए जानकारी उत्पन्न करने के लिए सी # कोड के बारे में डेटा प्राप्त कर सकते हैं।

2

यह एक पुराना सवाल है, लेकिन आप sharp2Js की कोशिश कर सकते। यह एक पुस्तकालय है जो आपके वर्गों को प्रतिबिंबित करने और कुछ उपयोगिता कार्यों के साथ जावास्क्रिप्ट ऑब्जेक्ट जेनरेट करने के लिए डिज़ाइन किया गया है।

उदाहरण आपके द्वारा दी गई खिलाफ चल रहा है (और एक T4 टेम्पलेट में स्ट्रिंग यह पैदा करता है outputting या अन्यथा):

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

का उत्पादन:

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; 
    } 
} 

वहाँ में अतिरिक्त मेटाडाटा कुछ मचान है संग्रह और जटिल प्रकारों का समर्थन करने के लिए विरासत वस्तुओं को ओवरराइड करने के लिए विरासत वाली वस्तुओं को बनाने की क्षमता, आदि

नोट: मैं टी नहीं हूँ वह sharp2Js का रखरखाव करता है, और यह नया है और अभी तक बहुत कुछ नहीं करता है, लेकिन शायद यह आपके जैसे परिदृश्यों में मदद कर सकता है।

संबंधित मुद्दे