C#如何将DataSet.GetXml()小数点分隔符改为“,”

C# How to change DataSet.GetXml() decimal separator to ","

调用方法 myDataSet.GetXml() 时,我的默认小数点分隔符是“,”,所有来自 myDataSet 的小数值都保存到 XML 中,并带有点“.”。分隔器。问题是,当我想将此 XML 解析回 myDataSet 时,由于此分隔符,VS 向我抛出十进制字段只接受十进制值的异常。

我如何得到的例子 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 时更改分隔符,或其他解决解析时问题的方法。谢谢!

您需要在应用程序开始时将数字分隔符设置为 CulutreInfo

如您所述,

DataSet.GetXml() 导出带有句点分隔符的小数列。您无法更改此设置:XML 架构数字数据类型始终使用句点分隔符。

然而,这段代码:

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

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

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

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

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