2010-11-10 12 views
7

मैं कक्षा के आधार पर एक एक्सएमएल स्कीमा उत्पन्न करना चाहता हूं, जैसे कि आप Xsd.exe tool के साथ कर सकते हैं।प्रोग्रामेटिक रूप से .NET Framework कक्षाओं के माध्यम से XSD.exe उपकरण सुविधा (वर्ग से स्कीमा उत्पन्न करें) का उपयोग करें?

उदा। xsd.exe /type: typename /outputdir:c:\ assmeblyname

क्या स्टैंडअलोन टूल का उपयोग करने के बजाय .NET Framework में कक्षाओं का उपयोग करके करने का कोई तरीका है?

मुझे यकीन है कि मैंने कार्य संदर्भों या इसी तरह के बारे में जानकारी देखी है - यानी कुछ प्रोग्राममैटिक - जिसका उपयोग इन स्टैंडअलोन यूटिलिटीज में से कुछ के स्थान पर किया जा सकता है, या कुछ स्टैंडअलोन यूटिलिटीज एफसीएल या माइक्रोसॉफ्ट के माध्यम से अपनी विशेषताएं प्राप्त करते हैं। एपीआई।

+0

ऐसा नहीं है कि मैं के बारे में पता कर रहा हूँ (के साथ एक एक शॉट वर्ग के रूप में एक ' GenerateXsd() 'विधि)। लेकिन आप एक अच्छी मात्रा में कोहनी ग्रीस के साथ इसे सिस्टम से कई वर्गों के साथ पुन: बना सकते हैं। रिफ्लेक्शन और सिस्टम.एक्सएमएल। –

+0

हम्मम्म ... धन्यवाद जेसीसी। क्या किसी को इंटरनेट पर इस प्रीपेक किए गए कोहनी ग्रीस के बारे में पता है? –

+0

जो भी आप खोज रहे हैं, लेकिन आप टूल को लपेट सकते हैं। यदि यह एक .NET उपकरण है, तो आप exe को भी संदर्भित कर सकते हैं, और कोड को सह-चयन कर सकते हैं। –

उत्तर

1

मिले इस जो लगता है कि यह चाल करना चाहिए ...

public static string GetSchema<T>() 
    { 
     XmlAttributeOverrides xao = new XmlAttributeOverrides(); 
     AttachXmlAttributes(xao, typeof(T)); 

     XmlReflectionImporter importer = new XmlReflectionImporter(xao); 
     XmlSchemas schemas = new XmlSchemas(); 
     XmlSchemaExporter exporter = new XmlSchemaExporter(schemas); 
     XmlTypeMapping map = importer.ImportTypeMapping(typeof(T)); 
     exporter.ExportTypeMapping(map); 

     using (MemoryStream ms = new MemoryStream()) 
     { 
      schemas[0].Write(ms); 
      ms.Position = 0; 
      return new StreamReader(ms).ReadToEnd(); 
     } 
    } 
+1

पर पूरा कोड: http://stackoverflow.com/questions/336988/xml-serialization-and-chechema-without-xsd-exe –

1

ऐसा करते हैं:

public string GetFullSchema() { 

     string @namespace = "yourNamespace"; 

     var q = from t in Assembly.GetExecutingAssembly().GetTypes() 
     where t.IsClass && t.Namespace == @namespace 
     select t; 

     XmlReflectionImporter importer = new XmlReflectionImporter(@namespace); 

     XmlSchemas schemas = new XmlSchemas(); 
     XmlSchemaExporter exporter = new XmlSchemaExporter(schemas); 


     foreach (var x in q) 
     { 
       var map = importer.ImportTypeMapping(x); 
       exporter.ExportTypeMapping(map); 
     } 

     using (MemoryStream ms = new MemoryStream()) 
     { 
      schemas[0].Write(ms); 
      ms.Position = 0; 
      return new StreamReader(ms).ReadToEnd(); 
     } 

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

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