【问题标题】:Why does VS generate a string property for a xs:nonNegativeInteger attribute for WCF client?为什么 VS 会为 WCF 客户端的 xs:nonNegativeInteger 属性生成字符串属性?
【发布时间】:2012-11-26 14:22:58
【问题描述】:

我正在使用 VS2010 构建 WCF 客户端。我们使用的 Web 服务定义了一些作为 xs:nonNegativeInteger 返回的数据。但是 VS2010 在生成 WCF 客户端代码时,会为这些 xs:nonNegativeInteger 属性生成具有字符串类型属性的类。

我想知道为什么会这样,以及是否以及如何告诉 VS2010 将其映射从 xs:nonNegativeInteger 调整为整数而不是字符串。

(我无法更改我们使用的 Web 服务的 wsdl...而且我也犹豫是否要简单地更改生成的代码以防我们需要更新服务引用,因此通过某种数据类型映射配置将是理想的。)

谢谢大家!

我们使用的 WSDL 的示例 sn-p:

<xs:element minOccurs="0" name="blub" type="xs:nonNegativeInteger" />

生成的 WCF 客户端代码示例 sn-p:

<System.Xml.Serialization.XmlElementAttribute(DataType:="nonNegativeInteger", Order:=0)>  _

Property blub() As String

【问题讨论】:

标签: visual-studio-2010 wcf wsdl type-conversion


【解决方案1】:

您似乎已将 SvcUtil 配置为使用 XmlSerializer 而不是 DataContractSerializer。 MSDN 说 XmlSerializer 将序列化 xs:nonNegativeInteger to stringDataContractSerializerserialize it to Int64 (在每个页面中搜索“nonNegativeInteger”)。

如果您出于某种原因不想使用DataContractSerializer,最好的选择是利用生成的代理类partial 类并创建一个单独的属性(intlong)封装转换逻辑而不影响 WCF 如何序列化/反序列化该字段。

顺便说一句:如果 string 转换真的让你烦恼,vote up this issue in CodePlex

【讨论】:

  • 谢谢 - 整数似乎不受限制,这意味着 xs:*integer 类型的 only valid mapping 将是任意大的 BigInteger
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-11
  • 2011-10-20
  • 2011-03-23
  • 1970-01-01
  • 2012-11-04
  • 1970-01-01
  • 2019-12-08
相关资源
最近更新 更多