📄
【.NET 5, F#】System.Text.Json 基礎
System.Text.Json
.NET で JSON を扱うための標準ライブラリです。
JSON 文字列と .NET のコレクション型の相互変換を行う仕組みを提供します。
https://docs.microsoft.com/ja-jp/dotnet/api/system.text.json
この記事の目的
System.Text.Json を C# から使用する方法は公式のページなど充実しています。
この記事は、それらの情報を F# に利用するための補足となるように意識しています。
この記事の構成
- コレクション型について
- 各方向の変換メソッドの記述方法
- 対応する、型・コレクション・JSON の一覧
コレクション型
F# 6 (.NET 6) にて対応しました🎉[1]。
System.Text.Json は標準だと F# 特有のコレクション型に対応していません[2]。
特別な理由がなければ下記の .NET と共通の型を使用するのが良さそうです。
{} → record
[] → array
コレクション → JSON
実行部分
System.Text.Json.JsonSerializer.Serialize<📝型>(📝コレクション)
パスカルケース → キャメルケース
System.Text.Json.JsonSerializer.Serialize<📝型>(
📝コレクション,
System.Text.Json.JsonSerializerOptions(PropertyNamingPolicy = System.Text.Json.JsonNamingPolicy.CamelCase)
)
JSON → コレクション
実行部分
System.Text.Json.JsonSerializer.Deserialize<📝型>(📝JSON)
キャメルケース → パスカルケース
System.Text.Json.JsonSerializer.Deserialize<📝型>(
📝JSON,
System.Text.Json.JsonSerializerOptions(PropertyNameCaseInsensitive = true)
)
object
型
type JsonX = {n: int}
コレクション
{ n = 10 }
JSON
{"n":10}
object#object
型 (1)
type JsonXObj = {n: int}
type JsonX = {obj: JsonXObj}
コレクション (1)
{ obj = { n = 20 } }
object の入れ子は匿名レコードでも表現できます。
型 (2)
type JsonX = {obj: {|n: int|}}
コレクション (2)
{ obj = {| n = 20 |} }
JSON
{"obj":{"n":20}}
array
型
type JsonX = {ary: array<int>}
コレクション
{ ary = [| 10; 20 |] }
JSON
{"ary":[10,20]}
プロパティ名の制御
型
type JsonX = {[<System.Text.Json.Serialization.JsonPropertyName("x-n")>] XN: int}
コレクション
{ XN = 30 }
JSON
{"x-n":30}
Discussion