1.21 jigowatts

Great Scott!

【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