bucket-sort logo bucket-sort

プログラミングとインフラエンジニアリングの覚え書き

  • Posts
  • About
  • Contact
  1. Home
  2. All Posts
  3. [C#] アプリケーションの設定をJSON形式で保存する - JsonSerializer

[C#] アプリケーションの設定をJSON形式で保存する - JsonSerializer

Jan 19, 2026 C# , .NET bucket-sort

前回の発展として、アプリケーションの諸設定を JSON ファイルに格納するクラスを作成してみます。

手順は同様に、まず DTO (Data Transfer Object) を定義し、保存・読み出しの処理は JsonSerializer に委ねるだけです。

アプリ設定格納クラス

public sealed class AppSettingsStore
{
    public sealed class SettingsDto
    {
        public string Theme { get; set; } = "Light";
        public int FontSize { get; set; } = 12;
        public bool EnableNotifications { get; set; } = true;
    }

    private readonly string _settingsPath;

    public AppSettingsStore(string appName)
    {
        var root = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
        var dir = Path.Combine(root, appName);
        Directory.CreateDirectory(dir);
        _settingsPath = Path.Combine(dir, "settings.json");
    }

    public SettingsDto Load()
    {
        if (!File.Exists(_settingsPath))
        {
            return new SettingsDto(); // デフォルト値
        }
        var json = File.ReadAllText(_settingsPath);
        return JsonSerializer.Deserialize<SettingsDto>(json) ?? new SettingsDto();
    }

    public void Save(SettingsDto settings)
    {
        var json = JsonSerializer.Serialize(settings,
            new JsonSerializerOptions { WriteIndented = true });
        File.WriteAllText(_settingsPath, json);
    }
}

テストコード

var appSettingsStore = new AppSettingsStore("SampleJson");

// 1. 初回読み込み(ファイルがない場合はデフォルト値)
Console.WriteLine("\n[1. 初回読み込み]");
var currentSettings = appSettingsStore.Load();
Console.WriteLine($"Theme: {currentSettings.Theme}");
Console.WriteLine($"FontSize: {currentSettings.FontSize}");
Console.WriteLine($"EnableNotifications: {currentSettings.EnableNotifications}");

// 2. 設定を変更
Console.WriteLine("\n[2. 設定を変更]");
currentSettings.Theme = "Dark";
currentSettings.FontSize = 16;
currentSettings.EnableNotifications = false;
Console.WriteLine($"変更後 - Theme: {currentSettings.Theme}, 
    FontSize: {currentSettings.FontSize},
    EnableNotifications: {currentSettings.EnableNotifications}"
);

// 3. 保存
Console.WriteLine("\n[3. 保存]");
appSettingsStore.Save(currentSettings);
Console.WriteLine("設定を保存しました。");

// 4. 再読み込みして確認
Console.WriteLine("\n[4. 再読み込みして確認]");
var reloadedSettings = appSettingsStore.Load();
Console.WriteLine($"Theme: {reloadedSettings.Theme}");
Console.WriteLine($"FontSize: {reloadedSettings.FontSize}");
Console.WriteLine($"EnableNotifications: {reloadedSettings.EnableNotifications}");
Console.WriteLine($"保存先: {Path.Combine(
    Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
    "SampleJson", "settings.json"
)}");

参考サイト

JsonSerializer Class (System.Text.Json) | Microsoft Learn
https://learn.microsoft.com/en-us/dotnet/api/system.text.json.jsonserializer?view=net-10.0

C# .NET Windows Code Snippet
← [C#] アプリケーションのデータをJSONにシリアライズする - JsonSerializer [C#] .NETが用意しているアプリケーションの設定クラスを試す - ConfigurationBuilder →

Related Posts

  • [C#] グローバルフックとキーボードフックを理解する - SetWindowsHookExの使い方 Jan 25, 2026
  • [C#] .NETが用意しているアプリケーションの設定クラスを試す - ConfigurationBuilder Jan 20, 2026
  • [C#] アプリケーションのデータをJSONにシリアライズする - JsonSerializer Jan 18, 2026
  • [C#] LiveChartsCoreで折れ線グラフを表示する(基本からレンジ切替まで) Jan 26, 2026

Table of Contents

  • アプリ設定格納クラス
  • テストコード
  • 参考サイト

Recent Posts

  • Laravel の Event / Listener で Pub/Sub を実装する Apr 2, 2026
  • [C#] delegate と event の仕組みを整理する Apr 1, 2026
  • Pub/Sub パターンとは何か Mar 31, 2026
  • PHP/Laravel で値の状態を判定するヘルパ関数まとめ Mar 30, 2026
  • Filament の dehydrated メソッドとは何か Mar 29, 2026

Categories

  • AWS27
  • C#22
  • .NET20
  • Laravel16
  • Linux12
  • Apache8
  • MySQL8
  • PHP8
  • DynamoDB6
  • Nginx5
  • WordPress4
  • インフラ4
  • Hugo3
  • セキュリティ3
  • .NET Framework1
  • Aurora1
  • Filament1
  • Git1
  • SQS1

Tags

  • AWS
  • C#
  • .NET
  • Laravel
  • PHP
  • MySQL
  • セキュリティ
  • Linux
  • Apache
  • Code Snippet
  • DynamoDB
  • NoSQL
  • PHP-FPM
  • RDS
  • DoS
  • Nginx
  • Windows
  • WordPress
  • パフォーマンス
  • 監視
  • Amazon Linux 2023
  • CMS
  • Docker
  • Ipset
  • Iptables
  • OPCache
  • Webサーバー
  • 認可
  • Aurora
  • Blade
Powered by Hugo & Explore Theme.