ASP.NET读取JSON文件遇InvalidOperationException及反序列化方法未识别求助
解决方案
问题1:JsonSerializer.Deserialize 无法识别
出现这个问题是因为命名空间缺失或使用了错误的序列化类,分两种场景处理:
场景A:使用官方内置的 System.Text.Json
- 在
JsonFileProductService类顶部补充命名空间引用:using System.Text.Json; using System.IO; // 确保引入,因为用到了File、Path相关方法 - 确认
Product类满足序列化要求:- 包含无参公共构造函数(如果手动定义了带参构造函数,必须显式添加无参构造)
- 需要序列化的属性为公共可访问状态
场景B:使用第三方库 Newtonsoft.Json
若要切换到Newtonsoft.Json,需修改代码并补充命名空间:
- 添加命名空间引用:
using Newtonsoft.Json; using System.IO; - 替换反序列化逻辑(Newtonsoft使用
JsonConvert类,配置类为JsonSerializerSettings):public IEnumerable<Product> GetProducts() { using (var jsonFileReader = File.OpenText(JsonFileName)) { return JsonConvert.DeserializeObject<Product[]>(jsonFileReader.ReadToEnd(), new JsonSerializerSettings { PropertyNameCaseInsensitive = true, MissingMemberHandling = MissingMemberHandling.Ignore }); } }
问题2:无法解析 JsonFileProductService 服务
这个错误是因为你未在ASP.NET的依赖注入容器中注册该服务,需按以下方式添加注册:
.NET 6+(Program.cs)
在var app = builder.Build();代码之前添加:
// 根据业务需求选择生命周期:AddScoped/AddTransient/AddSingleton builder.Services.AddScoped<JsonFileProductService>();
旧版本(Startup.cs)
在ConfigureServices方法中添加:
services.AddScoped<JsonFileProductService>();
完成上述配置后重新编译运行,问题即可解决。
内容的提问来源于stack exchange,提问作者Venkataraman Narayanan
相关产品推荐
相关产品推荐

