我试图以编程方式从任何.net类型生成xs:schema。我知道我可以使用反射并通过迭代公共属性来生成它,但是有内置的方法吗
例如:
[可序列化]
公共阶层人士
{
[XmlElement(IsNullable=false)]公共字符串名{get;set;}
[XmlElement(IsNullable=false)]公共字符串LastName{get;set;}
[xmlement(IsNullable=true)]公共字符串PhoneNo{get;set;}
}
期望输出:
<;xs:schema xmlns:xs=”http://www.w3.org/2001/XMLSchema“>;
<;xs:element name=“Person”type=“Person”/>;
<;xs:complexType name=“Person”>;
<;xs:sequence>;
<;xs:element minOccurs=“0”maxOccurs=“1”form=“unqualified”name=“FirstName”type=“xs:string”/>;
<;xs:element minOccurs=“0”maxOccurs=“1”form=“unqualified”name=“LastName”type=“xs:string”/>;
<;xs:element minOccurs=“0”maxOccurs=“1”form=“unqualified”name=“PhoneNo”type=“xs:string”/>;
</xs:sequence>;
</xs:complexType>;
</xs:schema>;
由于我的一些属性,我发现接受的答案生成了一个不正确的模式。e、 g.它忽略了用[XmlEnum(Name=“Foo”)]
我相信这是正确的方法(考虑到您使用的是XmlSerializer),而且非常简单:
var schemas=新的XmlSchemas();
var exporter=新的XmlSchemaExporter(模式);
var mapping=new XmlReflectionImporter().ImportTypeMapping(typeof(Person));
exporter.ExportTypeMapping(映射);
var schemaWriter=新的StringWriter();
foreach(模式中的XmlSchema)
{
schema.Write(schemaWriter);
}
返回schemaWriter.ToString();
代码摘自:
http://blogs.msdn.com/b/youssefm/archive/2010/05/13/using-xml-schema-import-and-export-for-xmlserializer.aspx