【问题标题】:XmlConvert.ToString not local invariant?XmlConvert.ToString 不是局部不变量?
【发布时间】:2014-01-10 12:44:16
【问题描述】:

对于我们的多层应用程序,我们使用XmlConvert.ToString() 来生成一个 xml。

这个 XML 字符串由我们的“配置应用程序”发送到物理设备进行配置。

另一个应用程序负责连接这个物理设备,并且必须检查远程物理设备是否具有相同的配置。

我们检查每个字段是否具有相同的字符串值。

我们用

写值
stringValue = XmlConvert.ToString((decimal)objValue);

我们两个软件的local不一样,好像有效果:

我们收到十进制值1。在具有我的自定义语言环境(fr-CH)的一个应用程序(配置器)上,我有以下输出: "1".

但在另一个应用程序上,使用完全相同的代码,我们收到输出 "1.0",导致我们的验证失败。

经过一番研究(here)我认为 XmlConvert.ToString 是文化不变的)。没有?

此外,我无法配置任何“文化”来序列化我的小数。我错过了什么?

【问题讨论】:

  • 您是否绝对确定在两台机器上都收到 1 而不是 1.0?它们在decimal 中有不同的表示。
  • 不,我不是很确定,我只知道当我在 Visual Studio 中用鼠标悬停变量时,我在两种情况下都显示了 1。即使它们有不同的表示,有没有办法确保它们写得一样?

标签: .net xml serialization decimal culture


【解决方案1】:

感谢@Jon Skeet 的评论,我终于找到了更多信息。

由于具有“精度”概念的小数(不知道),我收到一次“1.0”,一次“1”(实际上,1.0 来自数据库,我猜这会强制一些精度)。

我发现 this 可以标准化我的小数,效果很好:

public static class DecimalExtensions
{
    public static Decimal Normalize(this Decimal value)
    {
        return value / 1.000000000000000000000000000000000m;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-19
    • 2014-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多