shuhelohelo’s blog

Xamarin.Forms多めです.

System.Text.Jsonでコメント付きJSONをデシリアライズ

System.Text.json issue with comments · Issue #30743 · dotnet/runtime · GitHub

例えば以下のようなコメント付きのJSONがあったとする.

{
  //Comment
  "FirstName": "太郎",
  /*
  this is comment
  */
  "LastName": "田中"//コメントだよ!
}

これのデシリアライズを試みます.

まず,これに対応するクラスを用意しておきます.

    public class SampleData
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }

そして,以下のようにSystem.Text.Jsonを使ってデシリアライズします.

            SampleData sampleData = System.Text.Json.JsonSerializer.Deserialize<SampleData>(jsonString);

例外となります.

f:id:shuhelohelo:20200710173955p:plain

コメント付きのJSONをデシリアライズするには以下のように,JsonSerializerOptionsを使ってコメントを無視するように指定します.

            JsonSerializerOptions options = new JsonSerializerOptions
            {
                ReadCommentHandling = JsonCommentHandling.Skip
            };

            SampleData sampleData = System.Text.Json.JsonSerializer.Deserialize<SampleData>(jsonString, options);

シリアライズに成功します.以下はデシリアライズ後にFirstNameを出力しています.

f:id:shuhelohelo:20200710174334p:plain

ソースコード

github.com