2011-06-15 11 views
46

से सी # कक्षाएं उत्पन्न करें मैं एक सी # डब्ल्यूसीएफ वेब सेवा बना रहा हूं जो JSON प्रारूप में बहुत से डेटा लौटाता है। क्लाइंट एक आईपैड एप्लिकेशन है जिसे वर्तमान में किसी अन्य टीम द्वारा विकसित किया जा रहा है, इसलिए मैं विनिर्देशों पर काम कर रहा हूं, उदाहरण के बिना डेटा।
वर्तमान में जेएसओएन स्ट्रिंग .NET ढांचे द्वारा बनाई गई है, मेरी वेब सेवा एक सी # ऑब्जेक्ट लौटा रही है जिसमें सभी जानकारी शामिल हैं जिन्हें डेटाकंट्रैक्ट्स का उपयोग करके ढांचे द्वारा क्रमबद्ध किया जाता है।जेएसओएन स्कीमा

मेरी समस्या यह है कि संचार विनिर्देशों में केवल JSON स्कीमा फ़ाइलें होती हैं (http://json-schema.org/ पर आधारित)। विकास को सुविधाजनक बनाने के लिए मैं सी # में संबंधित कक्षाएं उत्पन्न करना चाहता हूं लेकिन फाइलों में बहुत सारी जानकारी है और वहां एक दर्जन फाइलें हैं, मैं वास्तव में उन वर्गों को मैन्युअल रूप से बनाना नहीं चाहता हूं।

तो मैं एक उपकरण है कि मुझे अनुमति होगी या तो की तलाश में हूँ:

  • एक JSON स्कीमा से सी # वर्गों उत्पन्न करने के लिए।
  • एक JSON स्कीमा को एक एक्सएसडी फ़ाइल में कनवर्ट करने के लिए। फिर कक्षाएं बनाना आसान होगा क्योंकि एक्सएसडी से कक्षाएं उत्पन्न करने के लिए बहुत सारे उपकरण हैं।

मुझे JSON स्कीमा के विरुद्ध JSON स्ट्रिंग को सत्यापित करने या JSON स्ट्रिंग से कक्षाएं उत्पन्न करने के लिए बहुत सारे टूल मिले लेकिन कुछ भी मेरी मदद करने के लिए प्रतीत नहीं होता है।
JSON.NET है लेकिन यह एक पुस्तकालय प्रतीत होता है, न कि एक उपकरण और मुझे इसके साथ कक्षाएं उत्पन्न करने के बारे में कोई जानकारी नहीं मिली।

तो अगर कोई उपकरण जानता है या मुझे यह पता है कि मैं उन वर्गों को कैसे उत्पन्न कर सकता हूं (मैंने जावा में कक्षाएं बनाने वाले टूल की कोशिश की लेकिन मैं इसे काम नहीं कर सका)।

+0

यह सवाल वास्तव में क्या मैं के लिए देख रहा हूँ नहीं है:

चल कोड, Schemas फ़ोल्डर परियोजना जड़ में स्थित के साथ उदाहरण। मेरे पास कोई JSON स्ट्रिंग नहीं है, मेरे पास सिर्फ एक JSON स्कीमा है। JSON स्ट्रिंग -> कक्षा के लिए उपकरण हैं। लेकिन JSON स्कीमा -> कक्षा के लिए कोई नहीं मिल सकता है। –

उत्तर

0

Json.NET की सहायता पर एक नज़र डालें। एक जेसन है। स्केमा नेमस्पेस जो उपयोगी हो सकता है।

http://james.newtonking.com/projects/json/help/

Json.NET - त्वरित प्रारंभ करता & API दस्तावेज़ Newtonsoft.Json.Schema नाम स्थान नेमस्पेस ► Newtonsoft.Json.Schema

परियोजना पृष्ठ: http://json.codeplex.com/

+1

हाँ, मैंने इसे देखा है, लेकिन मेरे खुद के वर्ग जनरेटर के निर्माण से अलग (यदि मैं एक मौजूदा उपकरण नहीं ढूंढता तो शायद मैं करूँगा), मुझे नहीं लगता कि यह मुझे बिना कक्षाओं को उत्पन्न करने में मेरी मदद कर सकता है बहुत प्रयास। –

+0

@ जुलिएन ने क्या आपने कभी अपना खुद का वर्ग जनरेटर लिखा था? –

+0

क्षमा करें मुझे याद नहीं है लेकिन मुझे ऐसा नहीं लगता है, मेरे पास शायद समय नहीं था, अगर मैंने किया तो मैं इसे प्रकाशित कर दूंगा :)। 3 साल बाद, यह अभी भी मौजूद नहीं है? –

-1

यहां एक ऑनलाइन है जेएसओएन डेटा के नमूना सेट से सी # कक्षाएं उत्पन्न करने के लिए मैंने अतीत में क्लास जनरेटर का उपयोग किया है:

http://json2csharp.com/

+0

और यह भी देखें http://jsonclassgenerator.codeplex.com/ –

3

So I'm looking for a tool that would allow me either : To generate C# classes from a JSON Schema...

मैं इसे इस्तेमाल नहीं किया है अपने आप को तो मैं इसके बारे में बहुत टिप्पणी नहीं कर सकता, लेकिन यह उपकरण "json-schema-to-poco" की तरह लगता है फिट क्या आप की जरूरत है।

प्रति अपने GitHub रीडमी:

Converts JSON schema files into plain old CLR objects in C#. Useful for running as part of an automated build process.

+0

दुर्भाग्यवश, जेसन-स्कीमा-टू-पॉको किसी वास्तविक कार्यान्वयन के बिना बस एक स्टब है – altso

1

मैं आज के लिए की जरूरत थी और अपने प्रश्न का कोई ठोस जवाब नहीं देखा तो मैं इस मार पड़ी है। यह सही नहीं है लेकिन यह बंद करने के लिए एक अच्छा प्रारंभिक बिंदु है।

https://gist.github.com/rushfrisby/c8f58f346548bf31e045

+1

अच्छा है, आपका जनरेटर कोड करने वाला पहला स्कीमा है, और उदाहरण के लिए जेसन कोड जेन मैंने पाया है कि वास्तव में काम करता है। – Vdex

+1

मैंने स्पष्ट रूप से @rushonroeks कोड को फटकारा है और इसे विभाजित कर दिया है, इसलिए मैं अन्य कोड/मॉडल जीन कर सकता हूं - विशेष रूप से नॉकआउट मॉडल देखें: https://gist.github.com/RhysC/480e7a758639a3215701 – RhysC

+0

ध्यान दें कि रुशोनरोक का कोड JSON.NET पर निर्भर करता है जिसे अभी तक जेसनशेमा वी 4 का समर्थन करने के लिए अपडेट नहीं किया गया है: https://github.com/JamesNK/Newtonsoft.Json/issues/115 – cbp

5

आप पुस्तकालय NJsonSchema का उपयोग एक JSON स्कीमा पढ़ने के लिए या एक प्रकार से जनरेट करेंगे, और इसमें से एक सी # वर्ग उत्पन्न करने के लिए कर सकते हैं।

आप इन कार्यों के लिए एक जीयूआई की जरूरत है, तो आप NSwagStudio जीयूआई NSwag उपकरणों से ऐसा करने के लिए कोशिश कर सकते हैं ... (यह भी NJsonSchema पर आधारित है)

+3

आपको प्रकटीकरण होना चाहिए कि आप वास्तविक डेवलपर हैं – Marco

+0

दृश्य जेसन संपादक भी है: https://github.com/rsuter/VisualJsonEditor – juFo

16

nuget पर इस पुस्तकालय को फिर से देखें। NJsonSchema.CodeGeneration एक JSON स्कीमा से C# या टाइपप्रति कोड उत्पन्न करने के लिए इस्तेमाल किया जा सकता:

var generator = new CSharpGenerator(schema); 
var file = generator.GenerateFile(); 

फ़ाइल चर अब JSON स्कीमा में निर्धारित सभी वर्गों के लिए सी # कोड है।

मुझे आज जेनरेट की गई कक्षा की आवश्यकता है लेकिन जेसन स्कीमा को सी # कक्षाओं में ऑनलाइन कनवर्ट करने वाली कोई साइट नहीं मिल सका, इसलिए उपर्युक्त लाइब्रेरी का उपयोग किया गया और http://json2csharp.rohitl.com/ जल्दी से कुछ लिखने की उम्मीद है।

0

इस सही तरीके से जवाब देने के लिए आपको पता होना चाहिए कि जेसन स्कीमा का संस्करण (ड्राफ्ट) क्या है।

उदाहरण जो पुस्तकालयों संभाल कर सकते हैं जो स्कीमा (2018/01/19):

Json.NET Schema supports draft 3, draft 4, draft 6 (MIT) 
Manatee.Json supports draft 4, draft 6, draft 7 (MIT) 
NJsonSchema supports draft 4 (Ms-PL) 

http://json-schema.org/implementations.html#validator-dotnet

NJsonSchema.CodeGeneration के साथ आप वास्तविक json में सीधे या तो नहीं भेज सकते हैं, तो आपको पहले की जरूरत कन्वर्ट करने के लिए यह एक वास्तविक स्कीमा (आपको अक्सर त्रुटि मिल जाएगी: Unable to cast object of type 'System.String' to type 'NJsonSchema.JsonSchema4 अन्यथा)।

class Program 
{ 
    static void Main(string[] args) 
    { 
     var location = Assembly.GetExecutingAssembly().Location; 
     var path = Path.GetFullPath(Path.Combine(location, @"..\..\..\Schemas\")); 
     var schemaJson = File.ReadAllText($"{path}Test.json"); 
     var schema = JsonSchema4.FromJsonAsync(schemaJson).Result; 
     var generator = new CSharpGenerator(schema); 
     var generatedFile = generator.GenerateFile(); 
    } 
} 

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

  • कोई संबंधित समस्या नहीं^_^