1

我们有区域相关的网络客户端,其中货币设置为区域格式,我们解析如下:

bool result = decimal.TryParse(currencyValue, NumberStyles.Currency, myCulture, out value);

当我们将此小数序列化为 xml 并且之前在 myCulture=en-US 中解析过小数时,xmlserializer 返回<Curr id="2" amnt="100000000.00"/>并将其反序列化回相同的数字......但是当我们在 sk-SK 或 cs-CZ 中执行此操作时,它返回<Curr id="2" amnt="100000000,00"/>返回 *100关于反序列化(忽略逗号)...

是否有可能从十进制中删除该区域,或使其保持不变?(如果我不想将其转换为字符串并再次解析以处理区域)

4

2 回答 2

1

所以我写了我自己问题的答案,可以关闭这个主题......

有一个新的有趣点,我今天早上开始工作后得到的。在序列化之前将有问题的十进制添加到字典中,这有点问题,因为 IDictionary 不能被序列化,直到它实现 IXmlSerializable。有两种方法可以覆盖,ReadXml 和 WriteXml。这是目标,在 WriteXml 中有 used decimalValue.ToString(),这导致了问题。我不知道为什么会这样,但这会.ToString()返回我所描述的不匹配结果。我不知道它是如何发生的,因为在测试项目中它运行良好,但在我们的完整上下文中却没有。但正如特工 Mulder 所相信的那样,真相就在那里

所以只有我需要做的就是decimalValue.ToString()改变decimalValue.ToString(CultureInfo.InvariantCulture)

谢谢你的时间。

于 2012-07-16T15:20:59.777 回答
0

区域用于屏幕显示——您以用户理解或喜欢的格式向用户显示信息。当数据没有显示给用户时(在内存中,在数据库中,通过网络),总是以已知的格式序列化它。正如@Oded 所指出的,就文化信息而言,这通常是InvariantCulture。

这使您可以将数据从一种文化转移到另一种文化,而无需让每种文化了解另一种文化。

于 2012-07-13T18:27:11.557 回答