我正在使用WCF WebInvokeAttribute
进行声明性JSON请求(DataContractJsonSerializer
),
基于DataContractAttribute
/ DataMemberAttribute
的序列化。
我正在使用支持返回包含基于不同文化的数据的JSON的服务。 默认情况下,此服务使用en-US文化设置,这意味着小数分隔符将为“。”。
我有一个具有System.Double
属性的类。
如果我使用使用“,”作为小数分隔符的区域性请求数据,则在解析SerializationException
时,在尝试反序列化此属性的值时会得到System.Double
:
“反序列化XXX类型的对象时出错。值'1,6276'无法解析为'double'类型。”
这当然是因为在解析Double时使用了不变的文化。 我希望在当前线程上设置正确的文化可以解决这个问题,但事实并非如此。
因此,任何不使用“。”的文化都会破坏服务。作为小数点分隔符。
非常感谢帮助。
谢谢!
答案 0 :(得分:3)
根据JSON Specification,应使用句点格式化数字。换句话说,问题不在Deserializer部分,而是在Serializer部分。
如果你必须使用逗号分隔符,那么我建议使用属性类型的字符串设置合约,并在类上提供一个非序列化的附加属性,以将字符串转换为小数(然后你就可以通过你需要的任何文化。