XmlEnumAttribute 在 WCF 请求中不起作用

本文关键字:不起作用 请求 WCF XmlEnumAttribute | 更新日期: 2023-09-27 17:56:28

我有一个XSD文件,其中包含以下序列:

<xs:simpleType name="typeVersion">
    <xs:restriction base="xs:string">
        <xs:enumeration value="01.01.01"/>
    </xs:restriction>
</xs:simpleType>

我使用 XSD 工具从中生成 C# 代码。序列被翻译为

[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
[System.SerializableAttribute()]
public enum typeVersion {
    /// <remarks/>
    [System.Xml.Serialization.XmlEnumAttribute("01.01.01")]
    Item010101,
}

我使用生成的代码创建对 WCF 服务的请求。请求包含类型为 typeVersion 的项目。问题是 Soap UI 请求 xml 中的01.01.01将无法正确反序列化。它抛出一个异常,并显示消息:The formatter threw an exception while trying to deserialize the message: There was an error while trying to deserialize parameter http://tempuri.org/:request. The InnerException message was 'Invalid enum value '01.01.01' cannot be deserialized into type 'typeVersion'. Ensure that the necessary enum values are present and are marked with EnumMemberAttribute attribute if the type has DataContractAttribute attribute.'. Please see InnerException for more details 。根据 http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlenumattribute.aspx?cs-save-lang=1&cs-lang=csharp,XmlEnumAttribute应该能够将指定的字符串转换为相应的枚举值。出于好奇,我尝试用Item010101替换01.01.01,请求已成功反序列化。

即使 msdn 明确指出该属性应该有效,这怎么不起作用?有没有办法解决这个问题,让它工作?不需要编辑生成的文件的解决方案是首选。谢谢!

XmlEnumAttribute 在 WCF 请求中不起作用

我在设置需要使用 XmlSerializer 的 WCF Web 服务时遇到了同样的问题。解决方案是避免在服务规范及其操作中使用OperationFormatUse.Encoded

XmlSerializerFormat(Style = OperationFormatStyle.Rpc, Use = OperationFormatUse.Literal)

请注意,文本是默认设置,因此可以省略:

XmlSerializerFormat(Style = OperationFormatStyle.Rpc)