【问题标题】:Question about decimal separator关于小数分隔符的问题
【发布时间】:2011-09-09 20:06:47
【问题描述】:

小数点分隔符('.' 或 ',' )是否取决于 CurrentCulture

我在序列化XML 时遇到问题。 当我输入“,”作为分隔符时,我有一个例外。 (文化设置为DE-de)

问候

示例(TestProperties 是我自己的测试类)

TestProperties properties = new TestProperties 

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(cultureName);

double tempValue = 1.23 // Or 1,23
properties.DoubleValue = tempValue;

XmlSerializer serializer = new XmlSerializer(typeof(TestProperties));
TextWriter textWriter = new StreamWriter(XMLPath);
serializer.Serialize(textWriter, properties);
textWriter.Close();


public class TestProperties
    {   
        private double _doubleValue;
        [XmlElement("Double")]
        public double DoubleValue
        {
            get { return _doubleValue; }
            set { _doubleValue = value; }
        }
    }

【问题讨论】:

  • 这是特定于文化的,但这取决于你在做什么。你能给我们看看代码吗?

标签: c# xml separator


【解决方案1】:

小数点分隔符由当前文化决定,但是,对于 XML 序列化,当前文化不被考虑在内。必须使用 XML 约定; XML 中的小数点分隔符总是一个点。

如果您手动构建 XML,您应该使用 XMLConvert 类来确保所有数据类型在 XML 中的格式正确。

【讨论】:

  • 感谢您的回复。我有另一个问题。我正在使用 XMLSerializator。是使用 InvariantCulture,还是使用 CurrentCulture?如果是当前的,我可以使用 Invariant 吗?我正在使用具有不同文化的系统,所以我喜欢在这些系统之间进行有效的序列化或反序列化。
【解决方案2】:

这完全取决于上下文。你提到xml; 在 xml 中,格式通常以非文化文化表示(这意味着:. 是十进制, , 是千位等)。同样,xml 对日期/时间有特定的表示。

如果您通过XmlWriterXElementXmlSerializer(等)构建您的 xml,这将是自动的;如果您是手动构建它,它很可能会被混淆(不同表示的混合)。

如果数据不是的预期格式,您可能必须将其加载到string 属性(而不是float 等)中,并单独处理它。

【讨论】:

  • 感谢您的回复。我有另一个问题。我正在使用 XMLSerializator。是使用 InvariantCulture,还是使用 CurrentCulture?如果是当前的,我可以使用 Invariant 吗?我正在使用具有不同文化的系统,所以我喜欢在这些系统之间进行有效的序列化或反序列化。
  • @ogrod87 它是 xml - 所以是不变的 plus 其他一些东西(即 DateTime 格式不同等); 在(反)序列化时,文化不应该是一个问题——但当然,在那之后你所做的任何事情都会受到文化的影响。您是否遇到了具体问题?
  • 是的。当我尝试使用点或逗号作为小数分隔符序列化值时会发生这种情况。取决于文化,在 XML 上我有不同的价值观。我想规范化 xml。无论我用逗号还是点输入值,我都想用点输入 XML 值。
  • @ogrod87 你有一个你如何尝试序列化的例子吗?否则我只是猜测
  • @ogrod87 并以该示例为例,desired xml 是什么,actual(不需要的)xml 是什么?
猜你喜欢
  • 2019-02-14
  • 1970-01-01
  • 2021-12-01
  • 2017-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-14
  • 1970-01-01
相关资源
最近更新 更多