c# – XSD的属性,用于防止XSD.exe FieldSpecified标志
发布时间:2020-12-15 22:41:18 所属栏目:百科 来源:网络整理
导读:我有一个xsd文件,下面有以下定义.当使用xsd.exe从xsd文件生成类时,enum attrs会获得一个额外的FieldSpecified属性,如下所示.除非设置了FieldSpecified属性,否则该值不会使用属性的值进行序列化.是否有一个额外的属性,我可以添加到xsd或一个标志,我可以使用xs
我有一个xsd文件,下面有以下定义.当使用xsd.exe从xsd文件生成类时,enum attrs会获得一个额外的FieldSpecified属性,如下所示.除非设置了FieldSpecified属性,否则该值不会使用属性的值进行序列化.是否有一个额外的属性,我可以添加到xsd或一个标志,我可以使用xsd.exe始终导致值序列化?
来自xsd的示例: <xs:simpleType name="adrLn"> <xs:restriction base="xs:string"> <xs:enumeration value="ST" /> <xs:enumeration value="APTN" /> </xs:restriction> </xs:simpleType> ... <xs:element name="AddressLine" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:attribute name="AddrLineTypCd" type="adrLn" /> </xs:complexType> </xs:element> 生成代码示例: /// <remarks/> [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd","4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)] public partial class RequestCheckIssueAddressAddressLine { private adrLn addrLineTypCdField; private bool addrLineTypCdFieldSpecified; /// <remarks/> [System.Xml.Serialization.XmlAttributeAttribute()] public adrLn AddrLineTypCd { get { return this.addrLineTypCdField; } set { this.addrLineTypCdField = value; } } /// <remarks/> [System.Xml.Serialization.XmlIgnoreAttribute()] public bool AddrLineTypCdSpecified { get { return this.addrLineTypCdFieldSpecified; } set { this.addrLineTypCdFieldSpecified = value; } } } 解决方法
没有标志可以改变行为 – 它全部由XSD驱动.
枚举不可为空.您的属性是可选的(XSD中use属性的默认值),因此需要xxxSpecified属性来控制关联字段的序列化(在您的情况下是addrLineTypCdField字段). 由于您已指示将XSD更改为可能,因此以下内容应解决您的问题(使该属性成为必需): <xs:attribute name="AddrLineTypCd" type="adrLn" use="required" /> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |