.NET Core无法反序列化JSON字符串,Newtonsoft可正常解析
问题根因
你遇到的报错是.NET Core默认使用的System.Text.Json序列化器的规则和之前的Newtonsoft.Json不一致导致的:
- 你的实体类
smDesktopSearchResultsVM中indexEventVMs字段定义为List<indexEventVMLite>集合类型 - 但待反序列化的JSON中,
indexEventVMs对应的是单个对象,而非数组包裹的对象集合 - Newtonsoft.Json默认支持自动将单个对象适配为只有一个元素的集合,
System.Text.Json默认没有开启这个适配逻辑,所以触发类型转换错误。 - Visual Studio可以正常解析JSON,是因为JSON本身格式合法,只是和你定义的实体类字段的类型不匹配,所以序列化器报错。
解决方案
方案1:配置System.Text.Json开启单对象转集合适配(推荐,改动最小)
自定义一个JsonConverter,实现单个对象到对应集合类型的自动转换,注册到序列化配置中即可:
public class SingleOrArrayConverter<T> : JsonConverter<List<T>> { public override List<T> Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType == JsonTokenType.StartArray) { return JsonSerializer.Deserialize<List<T>>(ref reader, options); } if (reader.TokenType == JsonTokenType.StartObject) { var item = JsonSerializer.Deserialize<T>(ref reader, options); return new List<T> { item }; } // 兼容null的情况 if (reader.TokenType == JsonTokenType.Null) { return null; } throw new JsonException(); } public override void Write(Utf8JsonWriter writer, List<T> value, JsonSerializerOptions options) { JsonSerializer.Serialize(writer, value, options); } }
反序列化时将转换器加入配置即可:
var options = new JsonSerializerOptions(); options.Converters.Add(new SingleOrArrayConverter<indexEventVMLite>()); // 可按需增加其他配置,比如属性名大小写不敏感 options.PropertyNameCaseInsensitive = true; var result = JsonSerializer.Deserialize<smDesktopSearchResultsVM>(jsonStr, options);
方案2:继续使用Newtonsoft.Json(兼容原有逻辑)
如果不想修改适配逻辑,可以在.NET Core项目中继续使用Newtonsoft.Json,避免适配问题:
- 安装NuGet包:
Newtonsoft.Json - 反序列化直接使用原有写法:
var result = JsonConvert.DeserializeObject<smDesktopSearchResultsVM>(jsonStr);
如果是ASP.NET Core项目,还可以在Program.cs中配置全局使用Newtonsoft.Json:
// .NET 6+ 写法 builder.Services.AddControllers() .AddNewtonsoftJson();
方案3:修改实体类定义(如果接口返回结构固定为单个对象)
如果确认接口返回的indexEventVMs永远是单个对象而非集合,可以直接修改实体类的字段类型:
// 把List<indexEventVMLite>改为单个对象类型 public indexEventVMLite indexEventVMs { get; set; }
同时删除构造函数中对应的集合初始化逻辑即可。
内容的提问来源于stack exchange,提问作者Julian Dormon
相关产品推荐
相关产品推荐

