使用XSD.exe生成非nillable字段,引用类型为minOccurs = 1

时间:2014-01-27 14:32:16

标签: c# xml xsd

我有以下课程:

[Serializable]
[XmlType(TypeName = "CoreAccount")]
public abstract class Account
{
    [XmlElement(IsNullable = true)]
    public string AccountNumber { get; set; }
    public decimal Balance { get; set; }
    public DateTime OpenDate { get; set; }
}

我正在使用Microsoft的XSD.exe从类中生成XML架构。正在XSD中生成'AccountNumber'属性,如下所示:

<xs:element minOccurs="1" maxOccurs="1" name="AccountNumber" type="xs:string" />

我很高兴这个元素是必需的,但是我想要接受一个空的(nillable)值。

我知道简单的选择是手动更新XSD以包含:

nillable="false"

但我希望能够以编程方式执行此操作,以便XSD.exe工具生成此功能。有人有什么建议吗?我在其他地方读到这是.NET的限制,但我想知道是否有其他人有任何想法。

提前致谢

1 个答案:

答案 0 :(得分:1)

对于给定的班级

[Serializable]
[XmlType(TypeName = "CoreAccount")]
public abstract class Account
{
    [XmlElement(IsNullable = false)]
    public string AccountNumber { get; set; }
    public decimal Balance { get; set; }
    public DateTime OpenDate { get; set; }
}

将始终生成具有以下元素的xsd

<xs:element minOccurs="1" maxOccurs="1" name="AccountNumber" type="xs:string" />

这是因为nillable属性的默认值为false请参阅 - http://www.w3schools.com/xml/el_element.asp

  

的nillable   可选的。指定是否可以为元素分配显式空值。 True允许元素的实例将null属性设置为true。 null属性被定义为实例的XML Schema名称空间的一部分。默认为false

通过查看XSD.exe的文档,没有办法明确生成xsd(https://msdn.microsoft.com/en-us/library/x6c1kb0s(v=vs.110).aspx