.Net Core读取Json配置文件的实现示例
前言:在与传统的asp.netMVC项目相比,.netcore项目在项目目录的文件结构上和功能上与前者都有很大的区别。例如:在.netcore中使用Startup.cs取代Global.asax文件用于加载应用程序的配置和各种启动项。appsettings.json取代web.config文件用于存储应用程序所需的配置参数等等。。。
OK!步入正题,下面来说一下如何读取Json配置文件中的参数。
第一种:使用IConfiguration接口
我们先在appsettings.json中配置好数据库连接字符串,然后读取它
{
"Connection":{
"dbContent":"DataSource=.;InitialCatalog=test;UserID=sa;Password=123456"
},
"Logging":{
"LogLevel":{
"Default":"Information",
"Microsoft":"Warning",
"Microsoft.Hosting.Lifetime":"Information"
}
},
"AllowedHosts":"*"
}
在控制器中注入IConfiguration接口
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Threading.Tasks;
usingMicrosoft.AspNetCore.Mvc;
usingMicrosoft.Extensions.Configuration;
namespaceRead.json.Controllers
{
[ApiController]
[Route("[controller]")]
publicclassReadController:Controller
{
privateIConfiguration_configuration;
publicReadController(IConfigurationconfiguration)
{
_configuration=configuration;
}
[HttpPost]
publicasyncTaskReadJson()
{
//读参
stringconn=_configuration["Connection:dbContent"];
return"";
}
}
}
当然也可以读取数组形式的json,一样的先在appsettings.json中写好配置参数,如下:
{
"Connection":{
"dbContent":"DataSource=.;InitialCatalog=test;UserID=sa;Password=123456"
},
//------------------------
"Content":[
{
"Trade_name":{
"test1":"小熊饼干",
"test2":"旺仔QQ糖",
"test3":"娃哈哈牛奶"
}
}
],
//------------------------
"Logging":{
"LogLevel":{
"Default":"Information",
"Microsoft":"Warning",
"Microsoft.Hosting.Lifetime":"Information"
}
},
"AllowedHosts":"*"
}
比如我们想读取test1
stringcommodity_test1=_configuration["Content:0:Trade_name:test1"];
第二种:使用IOptions
先把NuGet包导进项目:Microsoft.Extensions.Options.ConfigurationExtensions
首先在appsettings.json中添加节点如下
{
"Connection":{
"dbContent":"DataSource=.;InitialCatalog=test;UserID=sa;Password=123456"
},
//------------------------
"Content":[
{
"Trade_name":{
"test1":"小熊饼干",
"test2":"旺仔QQ糖",
"test3":"娃哈哈牛奶"
}
}
],
//------------------------
"Logging":{
"LogLevel":{
"Default":"Information",
"Microsoft":"Warning",
"Microsoft.Hosting.Lifetime":"Information"
}
},
"AllowedHosts":"*",
//==============================
"Information":{
"school":{
"Introduce":{
"Name":"实验小学",
"Class":"中班",
"Number":"15人"
},
"Region":{
"Province":"湖北",
"City":"武汉",
"Area":"洪山区"
},
"Detailed_address":[
{
"Address":"佳园路207号"
}
]
}
}
//==============================
}
然和再建立一个与这个节点"相同"的类
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Threading.Tasks;
namespaceRead.json
{
publicclassInformation
{
publicSchoolschool{get;set;}
}
publicclassSchool
{
publicIntroduceIntroduce{get;set;}
publicRegionRegion{get;set;}
publicListdata{get;set;}
}
publicclassIntroduce
{
publicstringName{get;set;}
publicstringClass{get;set;}
publicstringNumber{get;set;}
}
publicclassRegion
{
publicstringProvince{get;set;}
publicstringCity{get;set;}
publicstringArea{get;set;}
}
publicclassDetailed_address
{
publicstringAddress{get;set;}
}
}
在Startup中添加如下代码
#region服务注册,在控制器中通过注入的形式使用 services.AddOptions(); services.Configure(Configuration.GetSection("Information")); #endregion
控制器中使用:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Threading.Tasks;
usingMicrosoft.AspNetCore.Mvc;
usingMicrosoft.Extensions.Configuration;
usingMicrosoft.Extensions.Options;
namespaceRead.json.Controllers
{
[Route("api/[controller]/[action]")]
[ApiController]
publicclassReadController:Controller
{
privateIConfiguration_configuration;
readonlyInformation_Information;
readonlyIOptions_options;
publicReadController(IConfigurationconfiguration,
InformationInformation,
IOptionsoptions)
{
_configuration=configuration;
_Information=Information;
_options=options;
}
[HttpGet]
publicasyncTaskReadInformation()
{
stringAddress=_options.Value.school.Region.Province+"-"+
_options.Value.school.Region.City+"-"+
_options.Value.school.Region.Area+"-"+
_options.Value.school.Detailed_address[0].Address+"-"+
_options.Value.school.Introduce.Name+"-"+
_options.Value.school.Introduce.Class+"-"+
_options.Value.school.Introduce.Number;
returnJson(Address);
}
[HttpPost]
publicasyncTaskReadJson()
{
stringconn=_configuration["Connection:dbContent"];
stringcommodity=_configuration["Content:0:Trade_name:test1"];
return"";
}
}
}
第三种:这种应该比较常见,任意读取自定义的json文件
首先建立一个json文件
{
"system_version":{
"Edition":".NetCore3.0",
"Project_Name":"Read.json"
}
}
再建一个类,封装一个方法
usingMicrosoft.Extensions.Configuration;
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Threading.Tasks;
namespaceRead.json
{
publicclassJson_File
{
publicIConfigurationRootRead_Json_File()
{
//这句代码会读取read_json.json中的内容
returnnewConfigurationBuilder().AddJsonFile("read_json.json")
.Build();
}
}
}
在控制器中调用:
[HttpGet] publicasyncTaskReadSystemVersion() { varconfiguration=_json_File.Read_Json_File(); stringsystem="使用的是"+configuration["system_version:Edition"]+"的版本"+","+ "项目名称是"+configuration["system_version:Project_Name"]; returnJson(new { data=system }); }
Demo地址:https://github.com/Davenever/Read_Json.git
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。