如何使用IOptions加载json文件

使用IOptions加载json文件

在开发web时经常使用json文件来做一些配置,这时就需要读取json文件了。测试环境c#7.0 、asp.net core 、webApi

1.加载json文件

在Program.cs中添加代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;

namespace OptionReadJson
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
            /***********************重点***********************************/
            .ConfigureAppConfiguration((context,builder)=> {//加载json文件
                builder.AddJsonFile("Student.json", true, true);
            })
            /***********************重点***********************************/
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
    }
}

2.在Startup.cs中添加代码

将Student.json映射到Student实体类中

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;

namespace OptionReadJson
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
            /***********************重点***********************************/
            services.AddOptions();
            services.Configure<Student>(Configuration.GetSection("Student"));//类似于依赖注入
            /***********************重点***********************************/
        }
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseHttpsRedirection();

            app.UseRouting();
            app.UseAuthorization();
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
    }
}

3.如何使用

这里的IOptions 可以替换成IOptionsSnapshot, IOptionsMonitor只是生命周期不同

using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace OptionReadJson.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class StudentController: ControllerBase
    {
        public Student student { get; set; }
        /***********************重点***********************************/
        public StudentController(IOptions<Student> options)
        {
            student = options.Value;
        }
        [HttpGet]
        public ActionResult GetStudent()
        {
            return Ok(student);
        }
        /***********************重点***********************************/
    }
}

4.注意Student.json的格式要正确

{
  "Student": {
    "Name": "张松123",
    "Grade": "大三123",
    "Age": "21",
    "ClassName": "软件技术201912"
  }
}

5.Student实体类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace OptionReadJson
{
    public class Student
    {
        public string Name { get; set; }
        public string Grade { get; set; }
        public int Age { get; set; }
        public string ClassName { get; set; }
    }
}

6.第一篇博客

7. 参考链接

使用.net core读取Json文件配置

.NET Core 中 IOptions 有什么用

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菩提树下敲代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值