如何以编程方式从类型生成xml模式?

我试图以编程方式从任何.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”/>
&lt/xs:sequence>
&lt/xs:complexType>
&lt/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

发表评论