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

C#使用FOR JSON AUTO查询大数据时JSON拆分解析失败如何解决

问题根因

SQL Server 执行带FOR JSON AUTO/FOR JSON PATH语法的查询时,若生成的单条JSON结果长度超过2033字符,会自动按固定长度将结果拆分为多行片段返回,拆分位置仅按字符长度截断,不会考虑JSON语法结构完整性。直接读取未拼接的拆分片段做JSON解析,必然会因为结构断裂抛出格式错误。

解决方法

可任选以下一种方案修复:

方案1:C#端拼接所有返回片段(改动最小)

指定SqlQuery的返回类型为字符串集合,拿到所有拆分的片段后直接拼接为完整JSON字符串,再做解析即可:

// 读取所有拆分的JSON片段
var jsonSegments = _invoices.GetContext().Database()
    .SqlQuery<string>($"SELECT * FROM {tableName} FOR JSON AUTO")
    .ToList();
// 拼接为完整合法的JSON字符串
string validJson = string.Concat(jsonSegments);
// 执行解析
var json = JArray.Parse(validJson);

方案2:SQL端返回完整单值结果(无拆分)

通过T-SQL变量接收JSON查询结果,让SQL Server直接返回完整的单条字符串,从根源避免结果拆分:

string validJson = _invoices.GetContext().Database()
    .SqlQuery<string>($@"
        DECLARE @result NVARCHAR(MAX)
        SET @result = (SELECT * FROM {tableName} FOR JSON AUTO)
        SELECT @result
    ")
    .First();
var json = JArray.Parse(validJson);

安全提示:代码中直接拼接tableName的写法存在SQL注入风险,生产环境使用前必须对传入的表名做合法性校验,禁止直接透传未经过滤的用户输入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.22 16:12:27