首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用C#类型生成XSD.exe,从而将[XmlAttribute]属性映射到所需的XSD.exe属性?

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

Stack Overflow用户
提问于 2014-01-06 19:51:45
回答 1查看 4.2K关注 0票数 2

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

代码语言:javascript
复制
[Serializable]
public class Person
{
    [XmlAttribute]
    public string Name { get; set; }

    [XmlAttribute]
    public int Age { get; set; }
}

我得到的结果是:

代码语言:javascript
复制
<?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:

代码语言:javascript
复制
xsd.exe Sample.exe /type:Person

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

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

EN

回答 1

Stack Overflow用户

发布于 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属性所需的值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20958062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档