2012-11-26 43 views
3

我正在用VS2010構建一個WCF客戶端。我們使用的Web服務定義了一些數據,它返回爲xs:nonNegativeInteger。不過,VS2010在生成WCF客戶端代碼後,會爲這些xs:nonNegativeInteger屬性生成具有字符串類型屬性的類。爲什麼VS生成一個XS的字符串屬性:爲WCF客戶端非負屬性?

我很奇怪,爲什麼是這樣的話,如果我怎麼能告訴VS2010從XS調整其映射:非負整數,而不是字符串。

(我無法更改我們使用的Web服務的wsdl ...而且我也很猶豫是否需要更新服務引用時更改生成的代碼,因此可以通過某種類型的數據類型映射一個配置將是理想的。)

謝謝大家! WSDL中的

示例代碼片段,我們消耗:生成的WCF客戶端代碼的

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

示例代碼片段:

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

Property blub() As String 
+0

[相同所有的xs:*整數類型](http://stackoverflow.com/questions/9616040/why-does-xsd-exe-generate-string-property-for-xsinteger)。 – StuartLC

回答

1

看來你已經配置SvcUtil工具使用XmlSerializer代替DataContractSerializer的。 MSDN說XmlSerializer將序列化xs:nonNegativeIntegerto stringDataContractSerializerserialize it to Int64(在每個頁面中搜索'nonNegativeInteger')。

如果你不想使用DataContractSerializer出於某種原因,你最好的選擇是採取生成的代理類是partial類的優勢,創造一個單獨的屬性(或者intlong)封裝轉換邏輯,而不影響WCF如何序列化/反序列化該字段。

BTW:如果string轉換真的惹惱了你,vote up this issue in CodePlex

+0

謝謝 - 看來整數是不受限制的,這意味着[唯一有效映射(http://stackoverflow.com/a/9616162/314291)所述的xs:*整數類型。將任意大'BigInteger' – StuartLC

相關問題