我们获得了区域相关的网络客户端,其中货币设置为区域格式,我们将其解析为:
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(忽略逗号)...
是否有可能从十进制中删除此区域,或使其不变? (如果我不想将其转换为字符串并再次解析以处理区域性)
答案 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所说。
这使您可以将数据从一种文化传输到另一种文化,而无需让每种文化都了解另一种文化。