gpt4 book ai didi

c# - XmlEnumAttribute 在 WCF 请求中不起作用

转载 作者:太空狗 更新时间:2023-10-30 01:36:12 24 4
gpt4 key购买 nike

我有一个包含以下序列的 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 将无法正确反序列化。它抛出消息异常:格式化程序在尝试反序列化消息时抛出异常:尝试反序列化参数 http://tempuri.org/:request 时出错。 InnerException 消息是“无效的枚举值‘01.01.01’无法反序列化为类型‘typeVersion’”。如果类型具有 DataContractAttribute 属性,请确保存在必要的枚举值并用 EnumMemberAttribute 属性标记。'。有关详细信息,请参阅 InnerException。根据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 明确指出该属性应该有效,这怎么会不起作用?有什么办法可以解决这个问题吗?不需要编辑生成的文件的解决方案是首选。谢谢!

最佳答案

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

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

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

XmlSerializerFormat(Style = OperationFormatStyle.Rpc)

关于c# - XmlEnumAttribute 在 WCF 请求中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22836494/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com