关于小数点分隔符的问题

3

在序列化XML时,小数分隔符('.'或',')是否取决于CurrentCulture

我在使用TestProperties类进行测试时遇到了问题。 当我使用','作为分隔符时,会出现异常。(文化设置为DE-de)

谢谢!

示例:

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; }
        }
    }

这是与文化相关的,但它取决于你正在做什么。你能给我们展示代码吗? - TheCodeKing
2个回答

4

十进制分隔符由当前文化决定,但是对于XML序列化,当前文化不会被考虑在内。必须使用XML约定;XML中的十进制分隔符始终为点。

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


谢谢您的回复。 我有另一个问题。 我正在使用XMLSerializator。 它是使用InvariantCulture还是使用CurrentCulture? 如果是当前文化,我可以使用Invariant吗?我正在使用具有不同文化的系统,因此我在这些系统之间进行有效序列化或反序列化时遇到了麻烦。 - GrzesiekO

3
这完全取决于上下文。你提到了xml;在xml中,该格式通常以非文化文化的方式表示(这意味着:.是小数点,而,是千位分隔符等)。同样,xml有特定的日期/时间表示方法。
如果您通过XmlWriter、XElement、XmlSerializer(等)构建您的xml,这将是自动的;如果您手动构建它,可能会混淆(不同表示方法的混合)。
如果数据不符合预期格式,您可能需要将其加载到string属性中(而不是float等),并单独处理。

谢谢您回复。 我有另一个问题。 我正在使用XMLSerializator。 它使用InvariantCulture还是使用CurrentCulture? 如果使用当前文化,我可以使用InvariantCulture吗?我在使用具有不同文化的系统时遇到了一些问题,因此我无法有效地在这些系统之间进行序列化或反序列化。 - GrzesiekO
@ogrod87 这是 xml - 因此不变的 加上 一些其他的东西(例如 DateTime 格式不同等);在 (反)序列化的时候,文化应该不是问题 - 但当然,之后你所做的任何事情都受到文化的影响。你有看到具体的问题吗? - Marc Gravell
是的。当我尝试使用点或逗号作为小数分隔符序列化值时,会出现这种情况。根据文化背景,XML中的值不同。我想规范化XML。无论我输入逗号还是点,我都希望在XML中得到点的值。 - GrzesiekO
1
@ogrod87,通过这个例子,所述的“期望”XML是什么样的?而“实际”的(不期望的)XML又是怎样的呢? - Marc Gravell
@ogrod 听起来很奇怪... 意料之外。 - Marc Gravell
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接