C#怎么把一个DataTable对象保存为XML文件

DataTable.WriteXml()可直接保存为XML文件,支持WriteSchema(默认含结构)、IgnoreSchema(仅数据)和DiffGram(同步变更)三种模式,并建议用try-catch处理异常。

直接用 DataTable.WriteXml() 方法就能保存,简单高效,不需要手动拼接XML字符串。

基础写法:保存为标准XML文件

调用 WriteXml() 传入文件路径即可,它会自动创建文件并写入符合 DataTable 结构的 XML 内容(含 Schema):

dataTable.WriteXml("data.xml");

这样生成的 XML 同时包含数据和表结构(列名、类型等),后续用 ReadXml() 能完整还原 DataTable。

只保存数据不保存Schema

如果只需要纯数据(比如兼容旧系统或减小文件体积),加一个参数:

  • XmlWriteMode.IgnoreSchema:只写数据行,不写列定义
  • XmlWriteMode.WriteSchema(默认):写数据 + Schema
  • XmlWriteMode.DiffGram:写变更状态(用于同步场景)
dataTable.WriteXml("data.xml", XmlWriteMode.IgnoreSchema);

带异常处理的安全写法

实际项目中建议包一层 try-catch,避免路径无效或磁盘满等问题导致崩溃:

try
{
    dataTable.WriteXml("output.xml");
    Console.WriteLine("保存成功");
}
catch (UnauthorizedAccessException)
{
    Console.WriteLine("没有写入权限");
}
catch (DirectoryNotFoundException)
{
    Console.WriteLine("目标文件夹不存在");
}
catch (Exception ex)
{
    Console.WriteLine($"保存失败:{ex.Message}");
}

进阶:自定义格式或添加注释

WriteXml() 本身不支持直接加注释或缩进美化,但可以先写入 XmlDocumentXDocument 再处理:

  • WriteXml(XmlWriter) 重载,配合 XmlWriterSettings 控制缩进
  • 先保存到内存流,再加载为 XDocument 添加注释或调整结构

一般需求无需这么复杂,原生方法已足够清晰可靠。

基本上就这些,一行代码起步,按需加参数或异常处理就行。