我正在使用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