.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
相关产品推荐
相关产品推荐

