为什么VS为WCF客户端的xs:nonNegativeInteger属性生成字符串属性?

时间:2012-11-26 14:22:59

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

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

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

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

全部谢谢!

我们使用的WSDL的示例片段:

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

生成的WCF客户端代码的示例代码段:

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

Property blub() As String

1 个答案:

答案 0 :(得分:1)

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

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

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