gpt4 book ai didi

c# - 实例验证错误 : '2' is not a valid value for QueryType.(Web 服务)

转载 作者:太空狗 更新时间:2023-10-29 18:30:33 26 4
gpt4 key购买 nike

我有一个正在传递枚举的 Web 服务

public enum QueryType {
Inquiry = 1
Maintainence = 2
}

当我传递一个带有 QueryType 参数的对象时,我从 Web 服务返回错误:

'2' is not a valid value for QueryType

当你从枚举的声明中可以清楚地看出它是。

我无法更改枚举的值,因为遗留应用程序使用这些值,但我宁愿不必插入“默认”值来推送枚举的索引以使其与我的 Web 服务一起使用。它的行为就像 Web 服务正在使用值的索引而不是值本身。

有没有人建议我可以做些什么来让它工作,有什么我可以在我的 WSDL 中改变的吗?

最佳答案

我假设您正在使用 asmx 网络服务来回答这个问题。

您的猜测是正确的——XML 序列化程序使用 WSDL 中的枚举名称而不是值。

如果您查看 WSDL,它将看起来像这样:

<s:simpleType name="QueryType">
<s:restriction base="s:string">
<s:enumeration value="Inquiry" />
<s:enumeration value="Maintainence" />
</s:restriction>
</s:simpleType>


因此,当您调用该服务时,它需要一个作为枚举成员名称的字符串。当您使用 .NET 代理时,通常会为您处理此转换。如果传递给服务的值无法反序列化为枚举值,您将收到您所看到的消息。

要解决这个问题,您可以确保向它发送预期值,或者,如果这对您不起作用,您可以告诉 XML 序列化程序您想要使用什么值。您可以使用 XmlEnum 属性执行此操作:

public enum QueryType 
{
[XmlEnum("1")]
Inquiry = 1,
[XmlEnum("2")]
Maintainence = 2
}


这将生成以下架构片段(来自 WSDL):

<s:simpleType name="QueryType">
<s:restriction base="s:string">
<s:enumeration value="1" />
<s:enumeration value="2" />
</s:restriction>
</s:simpleType>


然后,如果您将值“2”传递给服务,那么它应该被正确反序列化,但您失去了枚举值的意义。

关于c# - 实例验证错误 : '2' is not a valid value for QueryType.(Web 服务),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1429457/

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