从十进制中删除区域

时间:2012-07-13 16:30:50

标签: c# asp.net type-conversion

我们获得了区域相关的网络客户端,其中货币设置为区域格式,我们将其解析为:

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(忽略逗号)...

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

2 个答案:

答案 0 :(得分:1)

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

有一个新的有趣点,我今天早上开始工作后得到的。在序列化之前,有问题的十进制被添加到distionary中,这有点问题,因为IDictionary可以被序列化,直到它实现IXmlSerializable。有两种方法可以覆盖ReadXml和WriteXml。这是目标,在WriteXml中使用了decimalValue.ToString(),这就产生了问题。我不知道为什么会这样,但是这个.ToString()会返回我所描述的错配结果。我不知道,它是如何发生的,因为在测试项目中它完美无缺,但在我们的完整背景下却没有。但正如代理人Mulder所认为的那样,the truth is out there

因此,只有我需要做的是decimalValue.ToString()更改为decimalValue.ToString(CultureInfo.InvariantCulture)

你的时间。

答案 1 :(得分:0)

区域用于屏幕显示 - 您以他们理解或喜欢的格式向用户显示信息。当数据未显示给用户时(在内存中,在数据库中,通过线上),始终以已知格式对其进行序列化。就文化信息而言,这通常是InvariantCulture,正如@Oded所说。

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