我正在使用C#從Java-web服務讀取數據。反序列化WCF服務時更改文化
我在VS2008中創建了一個Service引用到服務器,並且可以調用那個方法。然而,一些返回的字段的類型爲十進制的,並且自動生成的WCF代理獲取XML回失敗了的CommunicationException說:
"Error in deserializing body of reply message for operation 'getOpenReceivables'."
"There is an error in XML document (1, 941)."
"Input string was not in a correct format."
[編輯]這是一個完整的堆棧跟蹤:
at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
at System.Number.ParseDecimal(String value, NumberStyles options, NumberFormatInfo numfmt)
at System.Decimal.Parse(String s, NumberStyles style, IFormatProvider provider)
at System.Xml.XmlConvert.ToDecimal(String s)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderExecutePortType.Read2_XXNG_OPEN_RECEIVABLES(Boolean isNullable, Boolean checkType)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderExecutePortType.Read3_Item()
at Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer.Deserialize(XmlSerializationReader reader)
at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
我可以看到,返回的十進制數被格式化爲小數點的標點符號。出於測試目的,我嘗試了Decimal.Parse(「123.99」)並得到了相同的錯誤。通過設置一個
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
之前我的測試代碼爲Decimal.Parse(「123.99」)我得到那個工作。
但是,在調用WCFService方法之前設置CurrentCulture並沒有什麼區別。
有沒有什麼方法可以讓我的WCFService代理對象瞭解返回的XML是以另一種文化格式?
事實上,我的問題修正通過編輯誰做的web服務的傢伙給我的.xsd文件。 (有一個.wsdl文件,和兩個.xsd的)。你得到了分數,因爲這似乎是一個很好的解決方案和良好的聯繫,但我沒有真正嘗試過。 – 2009-10-01 14:08:13
你應該至少粘貼博客文章中最相關的代碼 - 鏈接已經死了 – 2017-03-07 12:35:37
對不起@CamiloTerevinto - 這是在7年前我寫這篇文章的時候,早在「必須粘貼代碼和鏈接」之前很長一段時間練習已正式化。我在Internet Archive上找到了博客,並使用存檔鏈接和代碼示例摘錄更新了我的答案。 – 2017-03-08 03:16:43