欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

.net core中編輯json配置文件的方法

 更新時(shí)間:2021年06月19日 11:54:13   作者:赫山老妖  
今天給大家分享.net core中編輯json配置文件的方法,在項(xiàng)目設(shè)計(jì)中,需要在運(yùn)行過程中,將遠(yuǎn)程服務(wù)端發(fā)送過來的配置信息回寫到配置文件中,具體內(nèi)容詳情跟隨小編一起看看吧

引言

最近在具體項(xiàng)目開發(fā)應(yīng)用中,項(xiàng)目采用的json格式配置文件,配置文件的加載采用的IConfiguration接口對(duì)象進(jìn)行的管理,這是.net standard時(shí)代,微軟所提供的現(xiàn)代化的配置管理工具。

項(xiàng)目設(shè)計(jì)中,需要在運(yùn)行過程中,將遠(yuǎn)程服務(wù)端發(fā)送過來的配置信息回寫到配置文件中。然而,必應(yīng)也好,百度也罷,翻遍網(wǎng)絡(luò),這套現(xiàn)代化的配置管理模型中,卻找不到一個(gè)可以改變配置回寫的方法。

無奈之下,只好自己動(dòng)手,手動(dòng)造輪子了。

.NET Standard時(shí)代的配置模型

隨著.NET Standard時(shí)代的來臨,System.Configuration在.net core中已經(jīng)不存在了,那么取而代之的是Microsoft.Extensions.Configuration系列配置管理類庫:

Microsoft.Extensions.Configuration.Abstractions:基礎(chǔ)接口

Microsoft.Extensions.Configuration:實(shí)現(xiàn)上面的基礎(chǔ)接口

Microsoft.Extensions.Configuration.FileProviderExtensions:提供重載配置擴(kuò)展

Microsoft.Extensions.Configuration.Binder:提供轉(zhuǎn)換到實(shí)體功能

Microsoft.Extensions.Configuration.FileExtensions:提供配置文件根路徑擴(kuò)展

相關(guān)文章資源

關(guān)于以上類庫的使用,網(wǎng)上有大量相關(guān)文章,如知名博主大內(nèi)老A的文章中,有著系統(tǒng)、詳細(xì)闡述,各位可自行查閱。

鏈接在此:https://www.cnblogs.com/artech/p/config-for-net-core.html

配置類的建議用法

出于編程上的便利,我們通常不會(huì)直接利用ConfigurationBuilder創(chuàng)建的Configuration對(duì)象讀取某個(gè)單一配置項(xiàng)的值,而是傾向于將一組相關(guān)的配置綁定為一個(gè)對(duì)象。

例如筆者某個(gè)項(xiàng)目消息主題配置參數(shù)類如下:

public class TopicConfig
{
        public string Project { get; set; } ="ibms";
        public string Device { get; set; } = "gateway";
        public string City { get; set; } = "wuhan";
        public string Area { get; set; } = "poly";
}

我們可以為配置類指定默認(rèn)參數(shù)。

在需要使用配置參數(shù)的對(duì)象中,我們可以將配置類設(shè)置為屬性字段

private TopicConfig topicConfig = new TopicConfig();

當(dāng)對(duì)象類被實(shí)例化時(shí),配置類將自動(dòng)被構(gòu)造并擁有默認(rèn)配置參數(shù)

我們?cè)谛枰褂门渲玫膶?duì)象類中,寫一個(gè)加載配置類的方法和保存配置類的方法,當(dāng)對(duì)象類構(gòu)造時(shí),調(diào)用并執(zhí)行加載配置文件。

當(dāng)配置文件存在時(shí),判斷對(duì)應(yīng)的配置段是否存在,如果存在,則綁定到對(duì)應(yīng)的配置類,從而實(shí)現(xiàn)配置參數(shù)的加載(對(duì)象類中,相關(guān)需要使用配置參數(shù)的地方,直接從配置類的獲取參數(shù));

當(dāng)配置文件不存在時(shí),加載配置方法調(diào)用保存配置方法,將默認(rèn)配置回寫到配置文件中。

當(dāng)配置參數(shù)動(dòng)態(tài)更新后需要保存時(shí),也通過調(diào)用保存配置方法,將配置參數(shù)更新到配置文件中。

示例json配置文件

{
    "topic": {
        "Project": "ibms",
        "Device": "gateway",
        "City": "wuhan",
        "Area": "poly"
    }
}

加載配置方法

筆者采用程序目錄下的"appsettings.json"文件作為配置文件

private void LoadConfig()
        {
            var path = Directory.GetCurrentDirectory();
            var config_file = "appsettings.json";
            var full_path = Path.Combine(path, config_file);
            if (File.Exists(full_path))
            {
                var builder = new ConfigurationBuilder()
                    .SetBasePath(path)
                    .AddJsonFile("appsettings.json");

                IConfiguration Configuration = builder.Build();

                if (Configuration.GetSection(Topic).Exists())//Topic為字符串常量,對(duì)應(yīng)配置段屬性名稱
                    Configuration.GetSection(Topic).Bind(topicConfig);//綁定配置數(shù)據(jù)到配置類
            }
            else
            {
                SaveConfig();
            }
     }

在dotnet core由于采用了更為模塊化的設(shè)計(jì)方式,使用配置類需要引用相應(yīng)的程序包,我們?cè)诔绦蛑惺褂胘son配置,需要安裝Microsoft.Extensions.Configuration.Json程序包。

Bind方法為擴(kuò)展方法,需要項(xiàng)目中先安裝Microsoft.Extensions.Configuration.Binder程序包。

程序包可通過Nuget包管理器進(jìn)行安裝。

保存配置方法

private void SaveConfig(string path = "")
{
        if (path == "") path = Directory.GetCurrentDirectory();
        Dictionary<string, object> sectionsInfo = new Dictionary<string, object>();

        sectionsInfo.Add(Topic, topicConfig); //Topic為字符串常量,對(duì)應(yīng)配置段屬性名稱
        JsonConfigHelper.SaveJson(sectionsInfo, path);
}

調(diào)用json配置保存類,將配置保存到指定的位置。

通用Json配置保存類

筆者針對(duì)需要改寫配置文件的應(yīng)用的需要,自行實(shí)現(xiàn)了一個(gè)保存json格式配置文件的通用類,支持同時(shí)保存多個(gè)配置類。

支持對(duì)現(xiàn)有配置文件節(jié)點(diǎn)的改寫和追加配置節(jié)點(diǎn)。

using System;
using System.Collections.Generic;
using System.IO;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace flyfire.Common
{
    public class JsonConfigHelper
    {
        public static bool SaveJson(Dictionary<string,object> sectionInfo, string configFilePath, string configFileName = "appsettings.json")
        {
            if (sectionInfo.Count==0)
                return false;

            try
            {
                var filePath = Path.Combine(configFilePath, configFileName);
                JObject jsonObject;

                if (File.Exists(filePath))
                {
                    using (StreamReader file = new StreamReader(filePath))
                    {
                        using (JsonTextReader reader = new JsonTextReader(file))
                        {
                            jsonObject = (JObject)JToken.ReadFrom(reader);
                        }
                    }
                }
                else
                {
                    jsonObject = new JObject();
                }

                foreach (var key in sectionInfo.Keys)
                {
                    jsonObject[key] = JObject.FromObject(sectionInfo[key]);
                }

                using (var writer = new StreamWriter(filePath))
                using (JsonTextWriter jsonwriter = new JsonTextWriter(writer)
                {
                    Formatting = Formatting.Indented,//格式化縮進(jìn)
                    Indentation = 4,  //縮進(jìn)四個(gè)字符
                    IndentChar = ' '  //縮進(jìn)的字符是空格
                })
                {
                    jsonObject.WriteTo(jsonwriter);
                    return true;
                }
            }
            catch (Exception)
            {
                return false;
            }
        }
    }
}

至此,我們完成了Json格式配置文件的加載、綁定與保存。

以上就是.net core中編輯json配置文件的詳細(xì)內(nèi)容,更多關(guān)于.net core json配置文件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論