2016-03-16 41 views
0

使用不變文化可以反序列化小數點嗎?帶不變文化的反序列化小數點

我能做到這一點使用此模式:

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

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

但我的容器由許多小數和我不好意思做了很多次。而且這看起來很奇怪。

回答

0

如果您使用.Net 4.5,您可以決定使用InvariantCulture作爲當前線程或整個應用程序的默認值,使用CultureInfo.DefaultThreadCurrentCulture。

查看here的信息。

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

Unfortunetely,這將引發異常,但第二個示例返回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); 
     }