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

如何用JsonTextWriter将多个JArray写入文件并合并为单个JArray?

解决Json.NET分页写入单个JSON数组的问题

你的问题出在每次分页都把整页数据序列化为完整的JArray并写入,导致文件里是多个独立数组拼接。要生成单个数组,需要手动控制数组的首尾,然后逐个写入元素(或分页写入元素时处理逗号分隔)。

修改方案

直接通过JsonTextWriter手动控制数组结构,避免每次写入完整数组:

// 先写入数组开头
await writer.WriteStartArrayAsync();

bool isFirstPage = true;
do
{
    resPre = await _dbService.GetAllByPageAndSizeAsync(page, pageSize);
    var dataOut = resPre?.Items;
    if (dataOut?.Count > 0)
    {
        foreach (var item in dataOut)
        {
            if (!isFirstPage)
            {
                // 非第一页的元素前先写逗号分隔
                await writer.WriteCommaAsync();
            }
            // 直接序列化单个元素到writer
            await JsonSerializer.CreateDefault().SerializeAsync(writer, item);
            isFirstPage = false;
        }
    }
    page++;
} while (resPre?.Items?.Count > 0);

// 写入数组结尾
await writer.WriteEndArrayAsync();
// 确保writer完成写入
await writer.FlushAsync();

方案优势

  • 避免了将整页数据转成JArray再序列化的额外开销,直接逐元素写入,内存占用更低
  • 精准控制JSON数组的结构,确保最终是单个完整数组
  • 异步操作保持原有性能,适合大数据量场景

原代码问题原因

原代码中rawJson.WriteToAsync(writer)会把整个JArray的[ ... ]完整写入文件,循环多次就会生成[...][...]这种非法的JSON结构,而我们需要的是[ ... , ... ]的单个数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 15:03:21