You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core中如何将DataSet序列化为JSON?

在.NET Core中序列化DataSet为JSON的解决方案

在.NET Core里完全可以把DataSet序列化为JSON,针对你遇到的两个问题,分别给出解决方案:

一、修复Newtonsoft.Json序列化输出XML的问题

默认情况下,Newtonsoft.Json会识别DataSet实现的IXmlSerializable接口,优先使用XML序列化逻辑,导致输出XML而非JSON。要强制生成JSON,需在序列化时配置JsonSerializerSettings,关闭XmlSerializable相关处理并处理循环引用:

var settings = new JsonSerializerSettings
{
    Formatting = Formatting.None,
    ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
    XmlIgnore = true // 忽略XmlSerializable特性,强制采用JSON序列化逻辑
};
string json = JsonConvert.SerializeObject(dataSet, settings);

二、解决System.Text.Json循环引用错误的问题

你在ConfigureServices中配置的ReferenceHandler.Preserve仅对ASP.NET Core MVC框架的序列化生效,直接调用JsonSerializer.Serialize时需要手动传入配置好的JsonSerializerOptions:

var options = new JsonSerializerOptions
{
    ReferenceHandler = ReferenceHandler.Preserve,
    MaxDepth = 128, // 可根据实际数据深度调整,默认64可能不足
    WriteIndented = false // 对应原代码的Formatting.None,生成紧凑JSON
};
string json = System.Text.Json.JsonSerializer.Serialize(dataSet, options);

可选优化:精简序列化结果

如果默认序列化结果包含过多DataSet内部元数据(如命名空间、表属性等),可以自定义转换逻辑,只序列化核心数据:

// 将DataSet转换为仅包含表数据的集合
var data = dataSet.Tables.Cast<DataTable>().Select(table => new
{
    TableName = table.TableName,
    Rows = table.AsEnumerable().Select(row => table.Columns.Cast<DataColumn>()
        .ToDictionary(col => col.ColumnName, col => row[col]))
});

// 序列化精简后的对象
string json = System.Text.Json.JsonSerializer.Serialize(data);

内容的提问来源于stack exchange,提问作者sarsnake

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 03:57:32