- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个包含以下序列的 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/
我有枚举: public enum Operation { /// [System.Xml.Serialization.XmlEnumAttribute("01")] Ite
我有一个枚举试图将字符串解析为枚举值,这适用于许多情况,但我开始获取 SOAP 值,这些值试图解析我的枚举之一的相同类型,但字符串的大小写是不同的,所以我做了一个像这样的快速解决方案: public
我需要一个通用函数来根据枚举的 XmlEnumAttribute“名称”属性检索枚举的名称或值。例如,我定义了以下枚举: Public Enum Currency CDN = 1 US
我通常不必问问题,因为大多数时候我会在互联网上找到我需要的东西,但现在我还没有找到获得这个的方法: 假设我在这个枚举中有大约 50000 个枚举元素: public enum myEnum {
我有一个包含以下序列的 XSD 文件: 我使用 XSD 工具从中生成 C# 代码。序列被翻译成 [System.CodeDom.Compiler.Genera
我是一名优秀的程序员,十分优秀!