In diesem Artikel erfahren Sie, wie Sie Konfigurationsinformationen in Json erhalten. Werfen wir einen Blick darauf.
Was ich in diesem Artikel mit Ihnen teilen werde, ist: Wie Sie Konfigurationsinformationen in Json erhalten und wie Sie Konfigurationsinformationen erhalten Die Datei appsettings.json, daher habe ich den Testpunkt auf die Konsolenanwendung von Netcore gesetzt. Die Verwendung von Konfigurationsdateien auf der Konsole ist ebenfalls üblich. Die offiziellen Website-Beispiele erläutern hauptsächlich das JSON-Format und bringen direkt das XML-Format. Deshalb teile ich diesen Artikel und hoffe, er kann Ihnen helfen >
Für die Netstandard-Erweiterung gibt es eine Konfigurationsdatei-Informationsoperationsklasse. Da die Webanwendung und die Konsolenanwendung von Core vereinheitlicht sind, werden die Testfälle unten in der Konsolenanwendung erläutert auch für Webanwendungen verwendet werden;
Um die JSON-Konfiguration zu erhalten, müssen wir zusätzlich zu den beiden oben genannten Referenzen auch Folgendes zitieren:
Install-Package Microsoft.Extensions.Configuration -Version 2.0.0 Install-Package Microsoft.Extensions.Configuration.Abstractions -Version 2.0.0
Dies ist die grundlegende Referenz der JSON-Konfiguration. Wir erstellen die Datei appsettings.json in der Konsolenanwendung und definieren die folgenden JSON-Konfigurationsdateiinformationen:
Dann benötigen Sie nur noch den folgenden Code, um die Dateiinformationen zu erhalten:
Install-Package Microsoft.Extensions.Configuration.Json -Version 2.0.0
Für Freunde, die bereits Erfahrung in der Kernentwicklung haben, das oben Genannte kann direkt verstanden werden, aber für eine vollständige Erklärung muss es hier noch kurz erwähnt werden:
{ "MyConfig": { "UserName": "神牛步行3", "userPwd": "666666", "GaoDeApi": { "UserName": "神牛步行1", "userPwd": "111111" }, "BaiDuApi":{ "userName": "神牛步行2", "userPwd": "222222" } } }
Offensichtlich wird hier der Wert des MyConfig:UserName-Knotens in der Konfigurationsdatei abgerufen. Hier wird der Konfigurationsknoten über IConfigurationSection GetSection(string key) abgerufen. ;-Funktion: Die hierarchische Beziehung des Konfigurationsknotens ist mit „key=MyConfig:UserName;“ verknüpft. Um das Programm schöner und benutzerfreundlicher zu gestalten, finden Sie hier die Kapselungsmethode zum Abrufen die JSON-Datei wie folgt:
var configBasePath = Directory.GetCurrentDirectory(); //configBasePath = @"D:\D\TTest"; sbLog.Append($"配置文件所在目录:{configBasePath}\n"); var builder = new ConfigurationBuilder(). SetBasePath(configBasePath). AddJsonFile("appsettings.json"); var config = builder.Build(); sbLog.Append($"MyConfig:UserName节点的值:{config.GetSection("MyConfig:UserName").Value}");
Hinweis: Bei Knoten wird die Groß-/Kleinschreibung nicht beachtet. Verwenden Sie „:“, um mehrstufige Knoten zu erhalten
/// <summary> /// json配置文件读取 /// </summary> /// <param name="configFileName"></param> /// <param name="basePath"></param> /// <returns></returns> public static IConfigurationRoot GetJsonConfig( string configFileName = "appsettings.json", string basePath = "") { basePath = string.IsNullOrWhiteSpace(basePath) ? Directory.GetCurrentDirectory() : basePath; var builder = new ConfigurationBuilder(). SetBasePath(basePath). AddJsonFile(configFileName); return builder.Build(); }
XML-Konfigurationsdateien sind bei uns ebenfalls üblich. Für den erweiterten IConfigurationBuilder haben wir auch Erweiterungen ähnlich der json-Methode, die Sie zuerst angeben müssen das folgende Paket:
var configJson = GetJsonConfig(); sbLog.Append($"json配置-MyConfg节点的值:\n"); sbLog.Append($"高德-UserName:{configJson.GetSection("MyConfig:GaoDeApi:UserName").Value}\n"); sbLog.Append($"百度-userName:{configJson["MyConfig:BaiDuApi:UserName"]}\n\r\n");
Der Unterschied liegt in der Erweiterung der AddXmlFile-Methode von IConfigurationBuilder. Dieses Beispiel verwendet den öffentlichen statischen IConfigurationBuilder AddXmlFile (dieser IConfigurationBuilder-Builder, Action
Sehen wir uns einen Teil des Codes an, der zum Abrufen des Konfigurationsknotens aufruft:
Install-Package Microsoft.Extensions.Configuration.Xml -Version 2.0.0
Es ist ersichtlich, dass die Art und Weise, wie XML und JSON Konfigurationsknoten lesen, gleich ist äußerster Knoten, wie hier: GaoDeApi:UserName, wenn Sie der JSON-Methode folgen, sollte der Schlüssel hier so aussehen: MyConfig:GaoDeApi:UserName, hier ist ein weiterer Unterschied zwischen den beiden, wie in der Abbildung gezeigt:
/// <summary> /// xml配置文件读取 /// </summary> /// <param name="configFileName"></param> /// <param name="basePath"></param> /// <returns></returns> public static IConfigurationRoot GetXmlConfig( string configFileName = "appsettings.xml", string basePath = "") { basePath = string.IsNullOrWhiteSpace(basePath) ? Directory.GetCurrentDirectory() : basePath; var builder = new ConfigurationBuilder(). //SetBasePath(basePath). AddXmlFile(b => { b.Path = configFileName; b.FileProvider = new PhysicalFileProvider(basePath); }); return builder.Build(); }
Nein Es können sowohl JSON- als auch XML-Konfigurationsinformationen abgerufen werden
<MyConfig> <GaoDeApi> <UserName des="高德的账号">神牛步行1</UserName> <userPwd>111111</userPwd> </GaoDeApi> <BaiDuApi> <userName des="百度的账号">神牛步行2</userName> <userPwd>222222</userPwd> </BaiDuApi> </MyConfig>
通常xml配置文件节点还有属性(attribute),如上面的xml节点:
sbLog.Append($"高德-UserName-des:{configXml.GetSection("GaoDeApi:UserName:des").Value}\n"); sbLog.Append($"百度-userName-des:{configXml["BaiDuApi:UserName:des"]}\n\r\n");
xml属性节点名称不能是name,不然是无法读取成功的;如这里的des改成name名称的话,无法正常获取信息,谨记于心;
配置文件能否不和应用放在一起呢? 答案是肯定的
有部分朋友会提出一个问题:配置文件能否不和应用放在一起呢? 答案是肯定的,我们只需把Directory.GetCurrentDirectory()(获取当前应用所在磁盘目录)替换成配置文件所在的基础目录就行了,如我这里的: configBasePath = @"D:\D\TTest";
下面是本次实例的整个测试用例代码:
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration.Json; using Microsoft.Extensions.FileProviders; using System; using System.Diagnostics; using System.IO; using System.Text; namespace MyService { class Program { static void Main(string[] args) { Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); Console.OutputEncoding = Encoding.GetEncoding("GB2312"); var sbLog = new StringBuilder(string.Empty); var configBasePath = Directory.GetCurrentDirectory(); //configBasePath = @"D:\D\TTest"; sbLog.Append($"配置文件所在目录:{configBasePath}\n"); var builder = new ConfigurationBuilder(). SetBasePath(configBasePath). AddJsonFile("appsettings.json"); var config = builder.Build(); sbLog.Append($"MyConfig:UserName节点的值:{config.GetSection("MyConfig:UserName").Value}\n\r\n"); var configJson = GetJsonConfig(); sbLog.Append($"json配置-MyConfg节点的值:\n"); sbLog.Append($"高德-UserName:{configJson.GetSection("MyConfig:GaoDeApi:UserName").Value}\n"); sbLog.Append($"百度-userName:{configJson["MyConfig:BaiDuApi:UserName"]}\n\r\n"); var configXml = GetXmlConfig(); sbLog.Append($"xml配置-MyConfg节点的值:\n"); sbLog.Append($"高德-UserName:{configXml.GetSection("GaoDeApi:UserName").Value}\n"); sbLog.Append($"百度-userName:{configXml["BaiDuApi:UserName"]}\n\r\n"); sbLog.Append($"高德-UserName-des:{configXml.GetSection("GaoDeApi:UserName:des").Value}\n"); sbLog.Append($"百度-userName-des:{configXml["BaiDuApi:UserName:des"]}\n\r\n"); Console.WriteLine(sbLog); Console.ReadLine(); } /// <summary> /// json配置文件读取 /// </summary> /// <param name="configFileName"></param> /// <param name="basePath"></param> /// <returns></returns> public static IConfigurationRoot GetJsonConfig( string configFileName = "appsettings.json", string basePath = "") { basePath = string.IsNullOrWhiteSpace(basePath) ? Directory.GetCurrentDirectory() : basePath; var builder = new ConfigurationBuilder(). SetBasePath(basePath). AddJsonFile(configFileName); return builder.Build(); } /// <summary> /// xml配置文件读取 /// </summary> /// <param name="configFileName"></param> /// <param name="basePath"></param> /// <returns></returns> public static IConfigurationRoot GetXmlConfig( string configFileName = "appsettings.xml", string basePath = "") { basePath = string.IsNullOrWhiteSpace(basePath) ? Directory.GetCurrentDirectory() : basePath; var builder = new ConfigurationBuilder(). //SetBasePath(basePath). AddXmlFile(b => { b.Path = configFileName; b.FileProvider = new PhysicalFileProvider(basePath); }); return builder.Build(); } } }
Das obige ist der detaillierte Inhalt vonEine Erklärung, wie .NetCore Konfigurationsinformationen in Json- und XML-Formaten erhält. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!