简单地说,当我使用XSD.exe ( Visual 2012附带的)从这个类生成XSD.exe文件时:
[Serializable]
public class Person
{
[XmlAttribute]
public string Name { get; set; }
[XmlAttribute]
public int Age { get; set; }
}我得到的结果是:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Person" nillable="true" type="Person" />
<xs:complexType name="Person">
<xs:attribute name="Name" type="xs:string" />
<xs:attribute name="Age" type="xs:int" use="required" />
</xs:complexType>
</xs:schema>注意,年龄属性是按需要指定的(它在生成的模式中有use="required"),而属性名称不是。
我像这样使用XSD.exe:
xsd.exe Sample.exe /type:Person其中Sample.exe是定义Person类的.NET程序集。
我想在我的类中以某种方式指定哪些XmlAttribute属性是必需的,哪些不是,这样XSD.exe就可以从这些属性自动生成模式。这个是可能的吗?
发布于 2014-01-07 00:53:32
除非XSD中有错误(不清楚您是否尝试了XSD.exe文档中描述的错误,特别是属性元素绑定支持 --现在我无法测试它),答案是可以的。
在您的例子中,名称和年龄之间的不同行为仅仅是因为字符串字段是可空的,而int字段不是空的(不知怎么说,我不相信int?会对您的情况产生影响,但是您仍然可以尝试.)属性不是nillable (从XSD的角度来看),因此使用可选属性。
Use :从类生成XML文档 在以下两种情况中的任何一种情况下,Xsd.exe都不指定use属性,而是恢复为默认值(可选): 存在一个额外的公共bool字段,该字段遵循指定的命名约定。 ·默认值通过System.Component.DefaultValueAttribute类型的属性分配给成员。 如果这两种条件都不满足,Xsd.exe将生成use属性所需的值。
https://stackoverflow.com/questions/20958062
复制相似问题