.net 读取json配置


theme: condensed-night-purple

安装相关包

Microsoft.Extensions.Configuration image.png

Microsoft.Extensions.Configuration.JSON image.png

创建json 配置文件

image.png

方式一

加载配置

``` using Microsoft.Extensions.Configuration;

namespace Config { public class Class1 { static void Main(string[] args) { ConfigurationBuilder configuration = new ConfigurationBuilder(); configuration.AddJsonFile( "config.json", optional:true , reloadOnChange:true ); IConfigurationRoot configurationRoot = configuration.Build();

string name = configurationRoot["name"];
        Console.WriteLine($"name={name}");

        string addr = configurationRoot.GetSection("proxy:address").Value;
        Console.WriteLine($"addr={addr}");


    }
}

} ```

控制台展示

image.png

方式二

下载依赖

Microsoft.Extensions.Configuration.Binder image.png

修改json配置

``` { "name": "zhangsan", "age": "33", "proxy": { "address": "南京一区", "port": "80" } }

```

测试

一、修改测试类

``` using Microsoft.Extensions.Configuration;

namespace Config { public class Class1 { static void Main(string[] args) { ConfigurationBuilder configuration = new ConfigurationBuilder(); configuration.AddJsonFile( "config.json", optional: true, reloadOnChange: true ); IConfigurationRoot configurationRoot = configuration.Build();

/*  string name = configurationRoot["name"];
          Console.WriteLine($"name={name}");

          string addr = configurationRoot.GetSection("proxy:address").Value;
          Console.WriteLine($"addr={addr}");*/

        Proxy proxy = configurationRoot.GetSection("proxy").Get<Proxy>();
        Console.WriteLine($"{proxy.Address},{proxy.port}");

    }

    class Proxy
    {
        public string Address { get; set; }

        public int port { get;set; }
    }
}

} ```

控制台展示

image.png

二、修改测试类

``` using Microsoft.Extensions.Configuration;

namespace Config { public class Class1 { static void Main(string[] args) { ConfigurationBuilder configuration = new ConfigurationBuilder(); configuration.AddJsonFile( "config.json", optional: true, reloadOnChange: true ); IConfigurationRoot configurationRoot = configuration.Build();

/*  string name = configurationRoot["name"];
          Console.WriteLine($"name={name}");

          string addr = configurationRoot.GetSection("proxy:address").Value;
          Console.WriteLine($"addr={addr}");*/

        /* Proxy proxy = configurationRoot.GetSection("proxy").Get<Proxy>();
         Console.WriteLine($"{proxy.Address},{proxy.port}");*/

        Config config = configurationRoot.Get<Config>();
        Console.WriteLine(config.name);
        Console.WriteLine(config.age);
        Console.WriteLine(config.proxy.port);
        Console.WriteLine(config.proxy.Address);
    }

    class Proxy
    {
        public string Address { get; set; }

        public int port { get;set; }
    }

    class Config
    {
        public string name { get; set; }
        public int age { get; set; }
        public Proxy proxy { get; set; }
    }
}

} ```

控制台展示

image.png

方式三

修改测试类

image.png

``` using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection;

namespace Config1 { public class Class1 { static void Main(string[] args) { ServiceCollection serviceCollection = new ServiceCollection(); serviceCollection.AddScoped ();

ConfigurationBuilder configuration = new ConfigurationBuilder();
        configuration.AddJsonFile(
            "config.json",
            optional: true,
            reloadOnChange: true
            );
        IConfigurationRoot configurationRoot = configuration.Build();

        serviceCollection.AddOptions().Configure<Config>(e=>configurationRoot.Bind(e));

        using (var sp = serviceCollection.BuildServiceProvider())
        {
           var c =  sp.GetRequiredService<Controller>();
            c.Test();
        }

            /*  string name = configurationRoot["name"];
              Console.WriteLine($"name={name}");

              string addr = configurationRoot.GetSection("proxy:address").Value;
              Console.WriteLine($"addr={addr}");*/

            /* Proxy proxy = configurationRoot.GetSection("proxy").Get<Proxy>();
             Console.WriteLine($"{proxy.Address},{proxy.port}");*/

       /* Config config = configurationRoot.Get<Config>();
        Console.WriteLine(config.name);
        Console.WriteLine(config.age);
        Console.WriteLine(config.proxy.port);
        Console.WriteLine(config.proxy.Address);*/
    }

    public class Proxy
    {
        public string Address { get; set; }

        public int port { get;set; }
    }

    public class Config
    {
        public string name { get; set; }
        public int age { get; set; }
        public Proxy proxy { get; set; }
    }
}

} ```

新增控制器

``` using Microsoft.Extensions.Options; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using static Config1.Class1;

namespace Config1 { public class Controller {

public readonly IOptionsSnapshot<Config> optionConfig;
    public Controller(IOptionsSnapshot<Config> optionConfig)
    {
        this.optionConfig = optionConfig;
    }

    public void Test()
    {
        Console.WriteLine(optionConfig.Value.name);
        Console.WriteLine(optionConfig.Value.age);
        Console.WriteLine(optionConfig.Value.proxy.Address);
        Console.WriteLine(optionConfig.Value.proxy.port);
    }
}

}

```

控制台输出

image.png

动态修改

若想控制台输出随着配置文件的修改而修改,可做出如下修改

``` using (var sp = serviceCollection.BuildServiceProvider()) { // 配置之后,会在下一个scope中生效 using(var scope = sp.CreateScope()) { var c = sp.GetRequiredService (); c.Test();

Console.WriteLine("********************");

        var c2 = sp.GetRequiredService<Controller2>();
        c2.Test();
    }

}

```

方式四_控制台输入

安装包

Microsoft.Extensions.Configuration.CommandLine

image.png

修改启动类

configuration.AddCommandLine(args);

image.png

控制台输入参数

进入 xxx\Config\bin\Debug\net6.0,输出cmd

image.png

控制台输入 Config1.exe name=lisi age=23

image.png

调试框输入参数

image.png

image.png

image.png

复杂结构配置

image.png

image.png

image.png

方式五_修改环境变量

下载包

Microsoft.Extensions.Configuration.Environment

image.png

修改环境变量

image.png

修改启动类

image.png

运行结果

image.png

隔离环境变量

指定环境变量前缀:

configuration.AddEnvironmentVariables("c1_");

image.png

只有前缀为"c1_"的环境变量才能被读取

image.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值