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
更为常见。如果你这样做,你就不需要担心文化/地区。
调用方法 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
更为常见。如果你这样做,你就不需要担心文化/地区。