繁体   English   中英

如何使用XSD.exe从C#类型生成XML架构,以便将[XmlAttribute]属性映射到所需的XML属性?

[英]How to generate XML Schema from C# type with XSD.exe such that [XmlAttribute] property is mapped to required XML attribute?

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

[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>

请注意,在生成的模式中将Age属性指定为必需属性( 使用use =“ required” ),而未指定Name属性。

我这样使用XSD.exe:

xsd.exe Sample.exe /type:Person

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

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

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

在您的情况下,“名称”和“年龄”之间的不同行为仅是由于以下事实:“字符串”字段可为空,而“整数”字段不是(某种程度上,我不相信一个“ int?会在您的情况下有所作为,但仍然如此)可以尝试...)属性不是不可设置的(从XSD角度来看),因此使用可选属性。

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

在以下两种情况中的任何一种情况下,Xsd.exe均未指定use属性,而是恢复为默认值optional:

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

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

如果这两个条件都不满足,则Xsd.exe会为use属性生成required值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM