C#中DataTable转XML最直接方式是调用WriteXml方法,支持字符串、文件、流输出,可保留结构与类型;配合XmlWriter可格式化缩进,传入XmlWriteMode.WriteSchema可同时导出Schema。

在C#中,将DataTable转换为XML最直接、标准的方式是调用其内置的WriteXml方法。它无需额外引用,支持多种输出形式(字符串、文件、流),且能完整保留结构、数据类型和关系信息。
使用WriteXml写入字符串(推荐)
若需获取XML字符串而非保存到文件,可配合StringWriter和XmlWriter实现:
- 创建
StringWriter和XmlWriter,指定格式化选项(如缩进)提升可读性 - 调用
dataTable.WriteXml(xmlWriter) - 从
StringWriter中获取结果字符串
示例代码:
var sw = new StringWriter();
using (var xw = XmlWriter.Create(sw, new XmlWriterSettings { Indent = true }))
{
dataTable.WriteXml(xw);
}
string xmlString = sw.ToString(); // 得到格式化的XML字符串
直接写入文件或流
适合导出场景,操作更简洁:
-
dataTable.WriteXml("data.xml")—— 保存为文件 -
dataTable.WriteXml(stream)—— 写入任意Stream(如MemoryStream) - 默认不带格式缩进;如需美化,仍建议用
XmlWriter方式
注意Schema与数据的包含方式
WriteXml默认只写数据(XmlWriteMode.IgnoreSchema)。如需同时导出表结构(XSD Schema),可传入第二个参数:
-
dataTable.WriteXml(xw, XmlWriteMode.WriteSchema)—— 数据+Schema -
dataTable.WriteXml(xw, XmlWriteMode.DiffGram)—— 用于跟踪变更(如DataSet更新场景) - 若仅需Schema不写数据,用
WriteXmlSchema方法
兼容性与常见问题
生成的XML符合.NET的DataSet序列化规范,可被DataSet.ReadXml准确还原。但要注意:
- 列名含特殊字符(如空格、点号)会被自动转义,不影响解析
-
null值默认写为(启用Schema时),否则省略该字段
- 时间类型会按ISO 8601格式(如
2024-05-20T14:30:00.0000000)输出 - 若DataTable未设置
TableName,根元素默认为NewDataSet,建议提前赋值以增强语义










