WebInvoke / DataContractJsonSerializer,'1,6276'无法解析为'double'

时间:2009-04-03 16:04:19

标签: wcf serialization datacontractserializer webinvoke

我正在使用WCF WebInvokeAttribute进行声明性JSON请求(DataContractJsonSerializer), 基于DataContractAttribute / DataMemberAttribute的序列化。

我正在使用支持返回包含基于不同文化的数据的JSON的服务。 默认情况下,此服务使用en-US文化设置,这意味着小数分隔符将为“。”。

我有一个具有System.Double属性的类。 如果我使用使用“,”作为小数分隔符的区域性请求数据,则在解析SerializationException时,在尝试反序列化此属性的值时会得到System.Double

  

“反序列化XXX类型的对象时出错。值'1,6276'无法解析为'double'类型。”

这当然是因为在解析Double时使用了不变的文化。 我希望在当前线程上设置正确的文化可以解决这个问题,但事实并非如此。

因此,任何不使用“。”的文化都会破坏服务。作为小数点分隔符。

非常感谢帮助。

谢谢!

1 个答案:

答案 0 :(得分:3)

根据JSON Specification,应使用句点格式化数字。换句话说,问题不在Deserializer部分,而是在Serializer部分。

如果你必须使用逗号分隔符,那么我建议使用属性类型的字符串设置合约,并在类上提供一个非序列化的附加属性,以将字符串转换为小数(然后你就可以通过你需要的任何文化。