具有不变文化的反序列化十进制

时间:2016-03-16 13:36:33

标签: c# decimal deserialization invariantculture

是否可以使用不变文化反序列化小数?

我可以用这种模式做到这一点:

 [XmlIgnore]
    public decimal CurrencyValue { get; set; }

    [XmlAttribute("CurrencyValue")]
    public string CurrencyValueString
    {
        set { CurrencyValue = Convert.ToDecimal(value, CultureInfo.InvariantCulture); }
    }

但是我的容器包含许多小数,我很尴尬地做了很多次。而且它看起来很奇怪。

2 个答案:

答案 0 :(得分:0)

如果您使用的是.Net 4.5,则可以决定使用InvariantCulture作为当前线程或整个应用程序的默认值,使用CultureInfo.DefaultThreadCurrentCulture。

有关信息,请参阅here

答案 1 :(得分:0)

我做了一个测试

XmlSerializer ser = new XmlSerializer(typeof(decimal));
        StringBuilder builder = new StringBuilder();
        CultureInfo.DefaultThreadCurrentCulture = CultureInfo.InvariantCulture;
        var row = XElement.Parse(@"<decimal>321,64</decimal>");
        using (var xmlReader = row.CreateReader())
        {
           var result = (decimal)ser.Deserialize(xmlReader);
        }

不幸的是,这会引发异常,但第二个例子返回32164(顺便说一句,这是不是很好的结果?)

XmlSerializer ser = new XmlSerializer(typeof(string));
        StringBuilder builder = new StringBuilder();
        var row = XElement.Parse(@"<string>321,64</string>");
        using (var xmlReader = row.CreateReader())
        {
           var result = (string)ser.Deserialize(xmlReader);
           decimal s = Convert.ToDecimal(result,CultureInfo.InvariantCulture);
        }