如何用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
相关产品推荐
相关产品推荐

