2010-11-10 17 views
7

Xsd.exe tool ile yapabildiğiniz gibi bir sınıfa dayalı bir XML Şeması oluşturmak istiyorum.Programlı olarak .NET Framework sınıfları aracılığıyla XSD.exe aracı özelliğini (sınıftan şema oluştur) kullanın.

E.g. xsd.exe /type: typename /outputdir:c:\ assmeblyname.

Tek başına aracı kullanmak yerine .NET Framework sınıfındaki sınıfları kullanarak bunu yapmanın bir yolu var mı?

Görev referansları veya benzerleri hakkında bilgi görmüş olduğumdan eminim - örneğin programatik - bu bağımsız yardımcı programların bazılarının yerine kullanılabilmesi veya bazı bağımsız yardımcı programların özelliklerini FCL veya Microsoft aracılığıyla edinmesi API.

+0

(ile bir atışlık sınıfı olarak bir ' GenerateXsd() yöntemi). Ancak, yeterli miktarda dirsek gresiyle System.Reflection ve System.Xml'den bir dizi sınıfla yeniden oluşturabilirsiniz. –

+0

Hmmmmm ... teşekkürler JesseC. Bu hazır ambalajlı dirsek yağından bazılarını bilen var mı? –

+0

Aradığın şey değil, ama aracı sarabilirsin. Bir .NET aracıysa, ayrıca exe'ye başvurabilir ve kodu birlikte seçebilirdiniz. –

cevap

1

o hile yapmak gerekir gibi görünüyor hangi bu ...

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

Tam kod: http://stackoverflow.com/questions/336988/xml-serialization-and-schema-without-xsd-exe –

1

bunu Bulunan: Ben farkında kadarıyla hayır

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

} 
İlgili konular