[C#] System.Text.Jsonでシリアライズとデシリアライズ

.Net FrameWork
スポンサーリンク

System.Text.Jsonを使う

以前、私はNewtonsoft.Jsonを使っていました。

Json.NET - Newtonsoft
Json.NET is a popular high-performance JSON framework for .NET

ですが、今回の記事では、Newtonsoft.JsonではなくSystem.Text.Jsonを使います。

C# で JSON をシリアル化する方法 - .NET
System.Text.Json 名前空間を使用して .NET で JSON にシリアル化する方法について説明します。 サンプル コードが含まれています。

利用するJsonファイルサンプル

{
  "position": {
    "xpos": 0,
    "ypos": 0
  },
  "size": {
    "width": 100,
    "height": 100
  },
  "users": [
    {
      "id": 1,
      "name": "xxx"
    },
    {
      "id": 2,
      "name": "yyy"
    },
    {
      "id": 3,
      "name": "zzz"
    }
  ]
}

Json管理クラス

まずは、Jsonデータを格納するプロパティを管理するクラスです。

/// <summary>
/// Jsonデータ管理クラス
/// メンバ変数はすべてプロパティで管理
/// </summary>
public class JsonData
 {
        //座標クラス
        public Position Position { get; set; }
        //Windowサイズクラス
        public Size Size { get; set; }
       //ユーザー管理クラス
        public User[] Users { get; set; }
}

public class Position
{
        public int Xpos { get; set; }
        public int Ypos { get; set; }
}

public class Size
{
        public int Width { get; set; }
        public int Height { get; set; }
}
public class User
{
        public int Id { get; set; }
        public string name { get; set; }
}

JsonDataクラスに読み込みメソッドを追加

次は、JsonDataクラスに読み込みメソッドを追加します。

public class JsonData
{
        /*プロパティは省略*/

        /// <summary>
        /// static:Json読みこみ
        /// </summary>
        public static JsonData ReadJson(string filepath)
        {
            if (!System.IO.File.Exists(filepath))
            {
                return null;
            }
            //Jsonファイルを文字列として取得
            string jsonstr = string.Empty;
            using (System.IO.StreamReader sr = new System.IO.StreamReader(filepath, Encoding.UTF8))
            {
                jsonstr = sr.ReadToEnd();
            }
            if (string.Empty.Equals(jsonstr))
            {
                return null;
            }
            System.Text.Json.JsonSerializerOptions options = new System.Text.Json.JsonSerializerOptions()
            {
                PropertyNameCaseInsensitive = true
            };

            //読み込んだJson文字列をデシリアライズ.
            JsonData data = System.Text.Json.JsonSerializer.Deserialize<JsonData>(jsonstr, options);
            return data;
        }
}

以下のJsonSerializerOptionsPropertyNameCaseInsensitivetrueにすることでJsonファイルを大文字小文字を区別せずに読み込むことが可能です。

JsonSerializerOptions クラス (System.Text.Json)
JsonSerializer で使用されるオプションを提供します。

JsonDataクラスに書き込みメソッドを追加

次はJsondataクラスに書き込みメソッドを追加します。

public class JsonData
{
        /*プロパティ、読み込みメソッドは省略*/

        /// <summary>
        /// static:Json書き込み
        /// </summary>
        public static void WriteJson(string filepath, JsonData jsonData)
        {
            //JsonDataクラスをシリアライズ
            string jsonstr = System.Text.Json.JsonSerializer.Serialize(jsonData);
            //ファイルへ書き込み
            System.IO.File.WriteAllText(filepath, jsonstr);
            return;
        }
}

まとめ

以上がSystem.Text.JsonでJsonファイルを利用する方法でした。

この記事を書いた人
プロフィール

サイト管理人
プログラマーを6年程しています。
プログラミングの情報やPC情報などを中心にアップしています。
得意言語:C言語/C++,Python,C#

夢犬をフォローする
スポンサーリンク
.Net FrameWork
夢犬をフォローする
タイトルとURLをコピーしました