亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

引言

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

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

無奈之下,只好自己動手,手動造輪子了。

.NET Standard時代的配置模型

隨著.NET Standard時代的來臨,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

配置類的建議用法

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

例如筆者某個項(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ù)的對象中,我們可以將配置類設(shè)置為屬性字段

private TopicConfig topicConfig = new TopicConfig();

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

我們在需要使用配置的對象類中,寫一個加載配置類的方法和保存配置類的方法,當(dāng)對象類構(gòu)造時,調(diào)用并執(zhí)行加載配置文件。

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

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

當(dāng)配置參數(shù)動態(tài)更新后需要保存時,也通過調(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為字符串常量,對應(yīng)配置段屬性名稱
                    Configuration.GetSection(Topic).Bind(topicConfig);//綁定配置數(shù)據(jù)到配置類
            }
            else
            {
                SaveConfig();
            }
     }

在dotnet core由于采用了更為模塊化的設(shè)計方式,使用配置類需要引用相應(yīng)的程序包,我們在程序中使用json配置,需要安裝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為字符串常量,對應(yīng)配置段屬性名稱
        JsonConfigHelper.SaveJson(sectionsInfo, path);
}

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

通用Json配置保存類

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

支持對現(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)四個字符
                    IndentChar = ' '  //縮進(jìn)的字符是空格
                })
                {
                    jsonObject.WriteTo(jsonwriter);
                    return true;
                }
            }
            catch (Exception)
            {
                return false;
            }
        }
    }
}

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

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

相關(guān)文章

最新評論