C#如何将DataSet.GetXml()小数分隔符更改为","

时间:2017-07-11 08:55:23

标签: c# xml dataset decimal separator

我的默认小数点分隔符为","当调用方法myDataSet.GetXml()时,myDataSet中的所有十进制值都用点"保存到XML。"分隔器。问题是,当我想将这个XML解析回myDataSet时,VS抛出了Exception,因为这个分隔符,十进制字段只接受十进制值。

示例我如何获取XML:

var xml = myDataSet.GetXml(); //Gives me XML with dots in decimals

我尝试解析DataTable的示例:

var recordsDeleted = new DataTable(); //In my code I clone table from existing
recordsDeleted.Columns.Add("decimalFirst", typeof(decimal));
recordsDeleted.Columns.Add("decimalSecond", typeof(decimal));
recordsDeleted.Columns.Add("text", typeof(string));

var paramsToDataTable = new List<string> {"12.34","22.22","Foo"}; //This comes from XML
recordsDeleted.Rows.Add(paramsToDataTable.ToArray());

请帮助我,如何在保存到XML时更改分隔符,或者在解析时解决问题的其他解决方案。谢谢!

2 个答案:

答案 0 :(得分:0)

您需要在应用程序开头将numbereperator设置为CulutreInfo

答案 1 :(得分:0)

DataSet.GetXml()会使用句点分隔符导出十进制列,如您所知。您无法更改此信息:XML架构数字数据类型始终使用句点分隔符。

但是,这段代码:

recordsDeleted.Rows.Add(paramsToDataTable.ToArray());

将尝试使用paramsToDataTable.ToArray()的文化将DataTable中的每个值转换为适当的数据类型。

此文化默认为CultureInfo.CurrentCulture,但您可以按如下方式覆盖它:

var recordsDeleted = new DataTable();
recordsDeleted.Locale = CultureInfo.InvariantCulture;

您应该注意,使用DataTable将XML读入DataTable.ReadXml()更为常见。如果你这样做,你就不必担心文化/地区。