C#でJSONをファイル入出力する

# 1. はじめに
* C#でJSONのクラスを定義して、ファイルへ入出力したい

# 2. 開発環境
* VisualStudio 2022
* .NET Framework 4.8
* Newtonsoft.Json (NuGet)

# 3. コンソールアプリを作成
# 3.1. 新規プロジェクトを作成する
* コンソール アプリ (.NET Framwwork)を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/7f9bc121-37f6-f69a-c7a6-f76ab494339a.png)

* フレームワークは「.NET Framework 4.8」を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/24769ee7-2a66-788e-52f5-a92642c7c77e.png)

* プロジェクトの作成が完了した
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/693991af-0f7f-1ef5-7c9a-2475c54620bb.png)

# 3.2. Newtonsoft.Jsonをインストールする
* プロジェクトを右クリックして、NuGetパッケージの管理を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/d36bd494-fece-6c71-60d9-4cefa1ec9499.png)

* Newtonsoft.Json をインストールする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/9444fa95-d316-01d8-286a-e7f6b62dfc4a.png)

* 変更プレビューでOKボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/8dc31759-ade6-04e4-efdf-751e70a86ce3.png)

# 3.3. JSONの定義クラスを作成する
```csharp:PersonJson.cs
using Newtonsoft.Json;

namespace JsonFileIO.Jsons
{
    [JsonObject("PersonJson")]
    public sealed class PersonJson
    {
        [JsonProperty("Name")]
        public string Name { get; set; }    // 名前

        [JsonProperty("Age")]
        public int Age { get; set; }    // 年齢

        [JsonProperty("Height")]
        public double Height { get; set; }  // 身長

    }
}
```

# 3.4. JSONをシリアライズ、デシリアイズする
```csharp:Program.cs
using JsonFileIO.Jsons;
using Newtonsoft.Json;
using System.Diagnostics;
using System.IO;

namespace JsonFileIO
{
    internal class Program
    {
        static void Main(string[] args)
        {
            PersonJson person = new PersonJson();

            // データを設定
            person.Name = "YoshijiGate";
            person.Age = 27;
            person.Height = 190.5;

            // 1. JSON データにシリアライズ
            // --------------------------------
            var jsonWriteData = JsonConvert.SerializeObject(person);

            // C:¥work¥PersonJson.json.json を UTF-8 で書き込み用でオープン
            using (var sw = new StreamWriter(@"C:\work\PersonJson.json", false, System.Text.Encoding.UTF8))
            {
                // JSON データをファイルに書き込み
                sw.Write(jsonWriteData);
            }

            // 2. JSON データにデシリアライズ
            // --------------------------------
            // C:¥work¥test.json を UTF-8 で開く
            using (var sr = new StreamReader(@"C:\work\test.json", System.Text.Encoding.UTF8))
            {
                // 変数 jsonReadData にファイルの内容を代入 
                var jsonReadData = sr.ReadToEnd();

                // デシリアライズして person にセット
                person = JsonConvert.DeserializeObject<PersonJson>(jsonReadData);
            }

            // デバッグで確認
            Debug.WriteLine(person.Name);
            Debug.WriteLine(person.Age);
            Debug.WriteLine(person.Height);
        }
    }
}
```

# 4. 動作検証
# 4.1. 入力用のJSONファイルを準備する
```JSON:test.json
{"Name":"YoshijiGate2","Age":22,"Height":222.2}
```

# 4.2. プログラムを実行する
* JSONファイルが出力された
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/9f3215ec-5526-768d-7fe4-ad6940f3bc55.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/28f6164b-2f8f-07df-239c-433385a7b8df.png)

* JSONファイルが入力できた
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/43fab400-4136-76c4-445b-58b579eec49c.png)

# 5. ソースコード
https://github.com/YoshijiGates/CSharp/tree/main/JsonFileIO

# 6. 参考文献
https://blog.hiros-dot.net/?p=8766