具有不变文化的反序列化十进制
Posted
技术标签:
【中文标题】具有不变文化的反序列化十进制【英文标题】:Deserialization decimal with invariant culture 【发布时间】:2016-07-02 10:15:05 【问题描述】:是否可以用不变的文化反序列化十进制?
我可以用这个模式做到这一点:
[XmlIgnore]
public decimal CurrencyValue get; set;
[XmlAttribute("CurrencyValue")]
public string CurrencyValueString
set CurrencyValue = Convert.ToDecimal(value, CultureInfo.InvariantCulture);
但是我的容器包含许多小数,我很尴尬这样做很多次。而且它看起来很奇怪。
【问题讨论】:
【参考方案1】:如果您使用的是 .Net 4.5,您可以决定将 InvariantCulture 作为当前线程或整个应用程序的默认值,使用 CultureInfo.DefaultThreadCurrentCulture。
有关信息,请参阅here。
【讨论】:
【参考方案2】:我做了一个测试
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);
【讨论】:
以上是关于具有不变文化的反序列化十进制的主要内容,如果未能解决你的问题,请参考以下文章