如何使用XSD.exe从C#类型生成XML Schema,以便属性映射到所需的XML属性?

简单地说,当我使用XSD.exe(Visual Studio 2012附带)从这个类生成XML模式文件时:

[Serializable] public class Person { [XmlAttribute] public string Name { get; set; } [XmlAttribute] public int Age { get; set; } } 

我得到了这个结果:

         

请注意, Age属性在生成的模式中指定为必需(它具有use =“required” ),而属性Name不是。

我像这样使用XSD.exe:

 xsd.exe Sample.exe /type:Person 

其中Sample.exe是.NET程序集,其中定义了Person类。

我想以某种方式在我的类中指定哪些XmlAttribute属性是必需的,哪些不是这样XSD.exe可以自动生成模式。 这可能吗?

除非XSD中存在错误(不清楚你是否尝试过XSD.exe文档中描述的内容,特别是属性元素绑定支持 – 现在我无法测试它),答案是肯定的,你可以。

在你的情况下,Name和Age之间的不同行为仅仅是因为String字段可以为空,而int字段是不可能的(不知何故我不相信int?会对你的情况产生影响,仍然是你可以尝试…)属性不是nillable(从XSD的角度来看),因此使用可选。

使用属性:从类生成XML模式文档

在以下两种情况之一中,Xsd.exe未指定use属性,还原为默认值optional:

•存在遵循指定命名约定的额外公共bool字段。

•通过System.Component.DefaultValueAttribute类型的属性为成员分配默认值。

如果这些条件都不满足,则Xsd.exe会生成use属性所需的值。