我正在使用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
答案 0 :(得分:1)
您似乎已将SvcUtil配置为使用XmlSerializer
而不是DataContractSerializer
。 MSDN说XmlSerializer
将序列化 xs:nonNegativeInteger to string,而DataContractSerializer
将serialize it to Int64(在每页中搜索'nonNegativeInteger')。
如果由于某种原因不想使用DataContractSerializer
,最好的选择是利用生成的代理类为partial
类,并创建一个单独的属性(int
}或long
)封装转换逻辑,而不影响WCF序列化/反序列化该字段的方式。
顺便说一句:如果string
次转化真的让你烦恼,vote up this issue in CodePlex。