我正在使用 C# 从 Java-webservice 读取数据。
我在 VS2008 中创建了对服务器的服务引用,并且可以调用那里的一种方法。但是,返回的一些字段是 Decimal 类型,并且当自动生成的 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 是另一种文化格式?