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

ASP.NET读取JSON文件遇InvalidOperationException及反序列化方法未识别求助

解决方案

问题1:JsonSerializer.Deserialize 无法识别

出现这个问题是因为命名空间缺失或使用了错误的序列化类,分两种场景处理:

场景A:使用官方内置的 System.Text.Json

  1. 在JsonFileProductService类顶部补充命名空间引用:
    using System.Text.Json;
    using System.IO; // 确保引入,因为用到了File、Path相关方法
    
  2. 确认Product类满足序列化要求:
    • 包含无参公共构造函数(如果手动定义了带参构造函数,必须显式添加无参构造)
    • 需要序列化的属性为公共可访问状态

场景B:使用第三方库 Newtonsoft.Json

若要切换到Newtonsoft.Json,需修改代码并补充命名空间:

  1. 添加命名空间引用:
    using Newtonsoft.Json;
    using System.IO;
    
  2. 替换反序列化逻辑(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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 09:05:10