Wcf WebInvoke/DataContractJsonSerializer和#x27;16276';无法解析为';双倍';
我正在使用WCFWcf WebInvoke/DataContractJsonSerializer和#x27;16276';无法解析为';双倍';,wcf,serialization,datacontractserializer,webinvoke,Wcf,Serialization,Datacontractserializer,Webinvoke,我正在使用WCFWebInvokeAttribute进行声明性JSON请求(DataContractJsonSerializer), 使用基于DataContractAttribute/DataMemberAttribute的序列化 我使用的服务支持返回包含基于不同区域性的数据的JSON。 默认情况下,此服务使用en-US区域性设置,这意味着小数分隔符将为“” 我有一个类具有System.Double属性。 如果我使用使用“,”作为十进制分隔符的区域性请求数据,则在解析系统时,尝试反序列化此属性
WebInvokeAttribute
进行声明性JSON请求(DataContractJsonSerializer
),
使用基于DataContractAttribute
/DataMemberAttribute
的序列化
我使用的服务支持返回包含基于不同区域性的数据的JSON。
默认情况下,此服务使用en-US区域性设置,这意味着小数分隔符将为“”
我有一个类具有System.Double
属性。
如果我使用使用“,”作为十进制分隔符的区域性请求数据,则在解析系统时,尝试反序列化此属性的值时,我会得到一个序列化异常。Double
:
“反序列化XXX类型的对象时出错。无法将值'16276'分析为'double'类型。”
这当然是因为在解析Double时使用了不变的区域性。
我希望在当前线程上设置正确的区域性可以解决这个问题,但是没有
因此,对于不使用“.”作为小数分隔符的任何区域性,服务都将中断
我会感激你的帮助
谢谢 根据,数字的格式应使用句点。换句话说,问题不在反序列化程序部分,而在序列化程序部分
如果您必须使用逗号分隔符,那么我建议您使用属性类型的字符串设置约定,并在类上提供一个未序列化的附加属性,以将字符串转换为十进制(这样您就可以传递任何需要传递的区域性).请更好地解释为什么文化是您服务中的一个因素,以及文化与其他服务的区别。如果这个问题很常见的话,我本应该早就听说过这个问题。这是服务客户端:这个组件的用户首先发现了这个bug,阅读底部的Derserialization错误线程。谢谢