本文へスキップ
BecomeCoder

C#実践コース · 第6章 代表的なNuGetパッケージとその使い方 · レッスン30

Newtonsoft.Json ― 柔軟なJSON操作(ローカル実施)

ローカル実施

導入

標準のSystem.Text.Jsonはすでに学びました。実務の既存プロジェクトでは、長年の定番Newtonsoft.Json(通称 JSON.NET)に非常によく出会います。「スキーマを決めずにJSONの一部だけ取り出す」など柔軟な操作が得意で、今も現役です。外部NuGetのためローカルで動かします。

図解

flowchart LR
    OBJ["C♯オブジェクト"] -->|SerializeObject| JSON["JSON文字列"]
    JSON -->|DeserializeObject<T>| OBJ
    JSON -->|JObject.Parse| JO["JObject<br/>キーで一部だけ取り出す"]

進め方

  1. スターター114-newtonsoft-json/starter.zipを展開し、NewtonsoftLesson.slnをVisual Studioで開く(Newtonsoft.Json導入済み)
  2. Program.csのTODOを埋める
  3. 期待される出力と照合する
  4. 詰まったらエラー一覧: NuGetエラー
Visual Studioの出力ウィンドウに、Newtonsoft.Jsonでシリアライズした整形済みJSONと、逆変換した値が表示された様子
オブジェクト⇄JSON文字列の相互変換と、JObjectによる部分取り出し

学ぶこと

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

var order = new { Id = 1, Items = new[] { "本", "ペン" } };

// オブジェクト → JSON文字列(Indentedで見やすく整形)
string json = JsonConvert.SerializeObject(order, Formatting.Indented);

// JSON文字列 → 型付きオブジェクト
Order back = JsonConvert.DeserializeObject<Order>(json)!;

// スキーマ(クラス)を用意せず、必要なキーだけ取り出す(LINQ to JSON)
JObject o = JObject.Parse(json);
string firstItem = (string)o["Items"]![0]!;   // "本"

record Order(int Id, string[] Items);
  • JsonConvert.SerializeObject / DeserializeObject<T>が基本のペア(System.Text.JsonJsonSerializerに相当)
  • JObject.Parse+インデクサで、クラスを定義せずにJSONの一部だけ取り出せるのが強み
  • 新規開発では標準のSystem.Text.Jsonが第一候補。既存資産・柔軟さが要る場面でNewtonsoft、と使い分ける
  • 属性[JsonProperty("key")]でキー名を対応づけできる(System.Text.Json[JsonPropertyName]に相当)

期待される出力

{
  "Id": 1,
  "Items": [ "本", "ペン" ]
}
最初の商品: 本

まとめ

  • Newtonsoft.JsonSerializeObject/DeserializeObject<T>で相互変換する老舗の定番
  • JObjectでスキーマなしに部分取り出しができる
  • 新規はSystem.Text.Json、既存・柔軟性重視はNewtonsoftと使い分ける

次回: SQLを自分で書く軽量ORMDapperです。

テンプレート構成(教材制作用メモ)

114-newtonsoft-json/
├── starter.zip   # Newtonsoft.Json導入済み / Program.cs(TODO入り)
└── solution/Program.cs