C# DataSet怎么读写XML文件 DataSet.ReadXml方法

8次阅读

DataSet.ReadXml 是 C# 中将 XML 加载到 DataSet 的核心方法,支持文件路径、Stream、TextReader、XmlReader 等输入源,需 XML 符合结构约定;WriteXml 默认只写数据,推荐用 XmlWriteMode.WriteSchema 保存 Schema 以确保还原准确性。

C# DataSet 怎么读写 XML 文件 DataSet.ReadXml 方法

DataSet.ReadXml 是 C# 中将 XML 数据加载到 DataSet 的核心方法,配合 WriteXml 可实现完整的读写闭环。它不依赖数据库,适合配置、缓存、轻量数据交换等场景。

ReadXml:从 XML 文件或流加载数据

支持多种输入源:文件路径、StreamTextReaderXmlReader。最常用的是文件路径和 XmlReader(便于控制解析行为)。

  • 直接传文件路径:ds.ReadXml("data.xml") —— 简单但无法捕获格式异常细节
  • XmlReader 更可控:
    var reader = XmlReader.Create("data.xml", new XmlReaderSettings { DtdProcessing = DtdProcessing.Ignore, IgnoreWhitespace = true});
    ds.ReadXml(reader);
  • 注意:XML 必须符合 DataSet 的结构约定(如包含 或能推断出表 / 列),否则可能只读出数据没结构,或抛 InvalidOperationException

WriteXml:保存 DataSet 到 XML

WriteXml 默认只写数据(无 Schema),若需下次准确还原结构,应显式指定 XmlWriteMode.WriteSchema

  • 仅数据:ds.WriteXml("output.xml")
  • 含 Schema(推荐):ds.WriteXml("output.xml", XmlWriteMode.WriteSchema)
  • 写入内存流便于后续处理:var ms = new MemoryStream(); ds.WriteXml(ms, XmlWriteMode.WriteSchema); ms.Position = 0;

常见问题 与应对

实际使用中容易遇到结构不匹配、编码 错误、命名冲突等问题。

  • “根元素缺失”或“无法推断表名”:确保 XML 顶层是 (默认)或显式指定 DataSet.DataSetName 后再写入;也可在 XML 中用 匹配 DataTable 名称
  • 中文乱码:XML 文件需声明编码(如 ),且 XmlReader.Create 不会自动识别,建议用带编码的 StreamReader 构造 XmlReader
  • DateTime 格式不一致:DataSet 默认按 ISO 8601 输出(如 2024-05-20T14:23:15.123),读取时也期望该格式;若源 XML 是 “2024/05/20″,需先预处理或改用字符串列 + 手动转换

替代方案提醒

DataSet + XML 是 .NET Framework 时代的典型做法,但在 .NET Core/.NET 5+ 中已不推荐用于新项目。现代更倾向:
– 强类型对象 + System.Text.JsonNewtonsoft.Json(JSON 更轻、更主流)
– 需 XML 时用 XmlSerializer 序列化自定义类
大数据 量或高性能场景避免 DataSet,改用 DataTable 或实体集合 + XmlReader/Writer 流式处理

星耀云
版权声明:本站原创文章,由 星耀云 2026-01-02发表,共计1370字。
转载说明:转载本网站任何内容,请按照转载方式正确书写本站原文地址。本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。
text=ZqhQzanResources