我想生成一个基于类的 XML Schema,就像您可以使用Xsd.exe 工具一样。
例如xsd.exe /type: typename /outputdir:c:\ assmeblyname
。
有没有办法通过使用 .NET Framework 中的类而不是使用独立工具来做到这一点?
我确信我已经看到了有关任务引用或类似的信息——即编程的东西——可以用来代替其中一些独立实用程序,或者一些独立实用程序通过 FCL 或 Microsoft API 获得它们的功能。
我想生成一个基于类的 XML Schema,就像您可以使用Xsd.exe 工具一样。
例如xsd.exe /type: typename /outputdir:c:\ assmeblyname
。
有没有办法通过使用 .NET Framework 中的类而不是使用独立工具来做到这一点?
我确信我已经看到了有关任务引用或类似的信息——即编程的东西——可以用来代替其中一些独立实用程序,或者一些独立实用程序通过 FCL 或 Microsoft API 获得它们的功能。
发现这个看起来应该可以解决问题......
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();
}
}
做这个:
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();
}
}