具有数据注释验证的复杂类型的Xml架构序列化
我有以下模式部分:
<xs:element name="authorizationNumber" type="authorizationIdType">
</xs:element>
<xs:complexType name="authorizationIdType">
<xs:choice>
<xs:element name="authorizationIdNumber" type="authorizationNumberType">
</xs:element>
<xs:element name="authorizationIdFree" type="xs:string">
</xs:element>
</xs:choice>
</xs:complexType>
<xs:simpleType name="authorizationNumberType">
<xs:restriction base="xs:string">
<xs:length value="17"/>
<xs:pattern value="(0[1-9]|1[0-9])(P0[1-3]|G0[1-5]|T0[1-2])d{12}"/>
</xs:restriction>
</xs:simpleType>
我从模式生成了class.cs,包括数据注释(使用xsd2code ++),所以我可以验证该对象。 class.cs的相应部分如下所示:
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public authorizationIdType authorizationNumber { get; set; }
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="x")]
public partial class authorizationIdType
{
[System.Xml.Serialization.XmlElementAttribute("authorizationIdFree", typeof(string), Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
[System.Xml.Serialization.XmlElementAttribute("authorizationIdNumber", typeof(string), Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
[System.Xml.Serialization.XmlChoiceIdentifierAttribute("ItemElementName")]
public object Item { get; set; }
[System.Xml.Serialization.XmlIgnoreAttribute()]
public ItemChoiceType2 ItemElementName { get; set; }
}
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="x", IncludeInSchema=false)]
public enum ItemChoiceType2
{
[System.Xml.Serialization.XmlEnumAttribute(":authorizationIdFree")]
authorizationIdFree,
[System.Xml.Serialization.XmlEnumAttribute(":authorizationIdNumber")]
authorizationIdNumber
}
问题是,作为一个复杂类型的数据注释不包括在内,但我不知道在这种情况下如何将它们包含为必须仅在公共对象Item的类型为authorizationIdNumber时应用它们。
例如,在另一个元素的简单情况下,可以像这样生成注释:
[System.ComponentModel.DataAnnotations.StringLengthAttribute(5)]
[System.ComponentModel.DataAnnotations.RegularExpressionAttribute("[0-9]{5}")]
public string PostalCode{ get; set; }
也许行:
[System.Xml.Serialization.XmlElementAttribute("authorizationIdNumber", typeof(string), Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
应该是这样的:
[System.Xml.Serialization.XmlElementAttribute("authorizationIdNumber", typeof(authorizationNumberType), Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
并创建一个包含数据注释的字符串值的类类型? 这是我不知道如何编码的部分,所以序列化和属性实例化仍然正常工作,但包含了数据批注验证。
链接地址: http://www.djcxy.com/p/56671.html上一篇: Xml schema serialization of complextype with data annotation validations
下一篇: Asp.net custom class data annotation validate on focus lost