【C#】App.configにJSONで設定値を定義
概要
とあるクライアントアプリでリスト形式の設定値を外部ファイル化したいよねって話があって、App.configにadd
タグで大量に定義するか悩んで、Json.NETを使ってJSON形式で設定してみることにしました。
add
タグたくさん書くのは気が引ける。
<appSettings> <!--users--> <add key="1" value="aaa" /> <add key="2" value="bbb" /> <add key="3" value="ccc" /> </appSettings>
環境
Visual Studio Community 2017
実装
パッケージマネージャーコンソールよりJson.NETをインストールしておきます。
PM> Install-Package Newtonsoft.Json
App.config
add
の定義は一つだけ。あれ、読みにくい?
<?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /> </startup> <appSettings> <add key="users" value='[ {"ID":"1","Name":"aaa"}, {"ID":"2","Name":"bbb"}, {"ID":"3","Name":"ccc"}, ]'/> </appSettings> </configuration>
Program.cs
とは言え、コンフィグから値を読み出す処理はkey
一つでいいのでシンプル。add
タグを連ねてたら動的に読んだりするし。
using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Configuration; namespace ConsoleApp2 { class Program { static void Main(string[] args) { var users = ConfigurationManager.AppSettings["users"]; var paramList = JsonConvert.DeserializeObject<List<User>>(users); foreach (var param in paramList) { Console.WriteLine(param.ID + ":" + param.Name); } Console.ReadKey(true); } } class User { public String ID { get; set; } public String Name { get; set; } } }
実行結果
取れてるっぽいので、あとはデータソースに突っ込むだけ!
1:aaa 2:bbb 3:ccc