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

.NET 8+C#调用API时多对象JSON反序列化报错求助

问题解决:JSON Lines格式反序列化报错

问题原因

你接收到的是JSON Lines格式(每行一个独立的JSON对象),而非标准的JSON数组。标准JSON要求只能有一个顶级值,而你的响应里是两个并列的{...}对象,直接反序列化就会抛出System.Text.Json.JsonException错误。

解决方案

方案1:逐行读取并反序列化每个对象

直接按行读取响应内容,对每行单独反序列化:

using System.Text.Json;
using System.IO;

// 假设responseContent是你获取到的完整响应文本
using var reader = new StringReader(responseContent);
string? line;
while ((line = reader.ReadLine()) != null)
{
    if (!string.IsNullOrWhiteSpace(line))
    {
        var result = JsonSerializer.Deserialize<RootObject>(line);
        // 处理反序列化后的对象
    }
}

// 对应的实体类定义
public class RootObject
{
    public Object1Wrapper Data { get; set; } = new();
}

public class Object1Wrapper
{
    public Object1 Object1 { get; set; } = new();
}

public class Object1
{
    public string Id { get; set; } = string.Empty;
    public string Name { get; set; } = string.Empty;
    public Labels Labels { get; set; } = new();
    public string Cid { get; set; } = string.Empty;
    public string Cn { get; set; } = string.Empty;
}

public class Labels
{
    public string App1 { get; set; } = string.Empty;
    public string App2 { get; set; } = string.Empty;
}

方案2:转换为标准JSON数组后反序列化

先将JSON Lines格式转换为标准JSON数组,再整体反序列化:

using System.Text.Json;

// 处理响应文本,转为JSON数组
var formattedJson = $"[{string.Join(",", responseContent.Split(Environment.NewLine)
    .Where(line => !string.IsNullOrWhiteSpace(line)))}]";

// 反序列化为列表
var results = JsonSerializer.Deserialize<List<RootObject>>(formattedJson);
// 处理结果列表

注意事项

  • 如果响应内容是通过流获取的(比如HttpClient的GetStreamAsync),推荐用方案1逐行读取,避免加载全部内容到内存,性能更优。
  • 实体类可以根据实际需求调整属性名称和类型,也可以用[JsonPropertyName]特性匹配JSON中的键名(比如[JsonPropertyName("data")])。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 18:07:05