如何从一个类创build一个XSD架构?

我很难与XSD文件。

我试图从一个类创build一个XSD文件:

public enum Levels { Easy, Medium, Hard } public sealed class Configuration { public string Name { get;set; } public Levels Level { get; set; } public ConfigurationSpec { get;set;} } public abstract class ConfigurationSpec { } public class ConfigurationSpec1 { // ... } public class ConfigurationSpec2 { // ... } 

请注意,我在configuration中有一个抽象类。 有了这个function,是否有可能创buildXSD,如果可能的话呢?

这个想法是将类Configuration传递给XSD。

您可以使用XSD.exe (可从您的Visual Studio安装。)

 public sealed class Configuration { public string Name { get; set; } public Levels Level { get; set; } public ConfigurationSpec Spec { get; set; } } public abstract class ConfigurationSpec { } public class ConfigurationSpec1 { } public class ConfigurationSpec2 { } 

结果是

 <?xml version="1.0" encoding="utf-8"?> <xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="Levels" type="Levels" /> <xs:simpleType name="Levels"> <xs:restriction base="xs:string"> <xs:enumeration value="Easy" /> <xs:enumeration value="Medium" /> <xs:enumeration value="Hard" /> </xs:restriction> </xs:simpleType> <xs:element name="Configuration" nillable="true" type="Configuration" /> <xs:complexType name="Configuration"> <xs:sequence> <xs:element minOccurs="0" maxOccurs="1" name="Name" type="xs:string" /> <xs:element minOccurs="1" maxOccurs="1" name="Level" type="Levels" /> <xs:element minOccurs="0" maxOccurs="1" name="Spec" type="ConfigurationSpec" /> </xs:sequence> </xs:complexType> <xs:complexType name="ConfigurationSpec" abstract="true" /> <xs:element name="ConfigurationSpec" nillable="true" type="ConfigurationSpec" /> <xs:element name="ConfigurationSpec1" nillable="true" type="ConfigurationSpec1" /> <xs:complexType name="ConfigurationSpec1" /> <xs:element name="ConfigurationSpec2" nillable="true" type="ConfigurationSpec2" /> <xs:complexType name="ConfigurationSpec2" /> </xs:schema> 

所有你需要做的就是编译你的程序集并运行XSD.exe和你的程序集的path作为参数。 XSD.exe /? 也有所有参数的列表。

示例: XSD.exe C:\Dev\Project1\Bin\Debug\library.dll

您可以成功地将xsd.exe集成到Visual Studio IDE中,如下所示:

进入Tools, External Tools ,然后单击添加button:

2010

在这里输入图像说明

2015年/ 2017年

在这里输入图像说明

标题:

从类创build模式

命令(每个框架):

4

C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\x64\xsd.exe

4.5.1

C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\x64\xsd.exe

4.6。*

C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.* Tools\x64\xsd.exe

参数:

$(BinDir)$(TargetName).dll /outputdir:$(ItemDir) /type:$(ItemFileName)

使用输出窗口:

防止额外的命令窗口popup,并保持输出的logging,直到您清除它。 可能是一个好主意。

提示参数:

检查是否要testing输出或排除故障; 否则,请不要选中。

点击OK

如何使用:

  1. 编译你的项目! XSD.exe只看编译的代码。
  2. 解决scheme资源pipe理器中单击该类。
  3. 单击Tools, Create Schema From Class
  4. 点击Solution Explorer中Show All Filesbutton。
  5. 在你的类中查找相同的文件夹,你会看到Schema0.xsd
  6. Schema0.xsd单击鼠标右键,然后selectInclude In Project
  7. Schema0.xsd重命名为<the name of the class>.xsd
  8. (可选)如果要使用此模式编辑xml编辑器中的xml文件,并且没有使用所有属性,则可能必须手动编辑此新的xsd 。 你可以用use="required"replace为use="optional"来摆脱xml编辑器中的蓝色波浪线(创build警告),如果确实不需要这些属性的话。