繁体   English   中英

具有不变文化的反序列化小数

[英]Deserialization decimal with invariant culture

可以使用不变文化对十进制进行反序列化吗?

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

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

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

但是我的容器中包含许多小数,而这样做很尴尬。 而且看起来很奇怪。

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

有关信息,请参见此处

我做了一个测试

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(BTW。结果好吗?)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM