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;
}
}
以下のJsonSerializerOptionsのPropertyNameCaseInsensitiveをtrueにすることで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ファイルを利用する方法でした。