martedì 23 novembre 2010

LINQ to XML - Recupero di un elemento decimal

C# 4.0
Nel leggere un valore di tipo decimal da un file XML mi si presenta un problema con i decimali in fase di casting. Ovvero il dato letto ha come separatore decimale il “.” mentre nella mia cultura è la “,” il risultato finale è quindi abbastanza evidente:
0.1   diventa 1

Questo è causato da un errato casting dell’elemento appena letto che nello specifico è:
XElement xElement = document.Root.Elements().Where(p => p.Name.LocalName.Equals("Value")).First();

decimal value = (decimal)xElement.Value;

invece si deve fare il casting dell’intero elemento XElement

decimal value = (decimal)xElement;