導入
標準の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/>キーで一部だけ取り出す"]
進め方
- スターター
114-newtonsoft-json/starter.zipを展開し、NewtonsoftLesson.slnをVisual Studioで開く(Newtonsoft.Json導入済み) Program.csのTODOを埋める- 期待される出力と照合する
- 詰まったらエラー一覧: NuGetエラーへ
学ぶこと
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.JsonのJsonSerializerに相当)JObject.Parse+インデクサで、クラスを定義せずにJSONの一部だけ取り出せるのが強み- 新規開発では標準の
System.Text.Jsonが第一候補。既存資産・柔軟さが要る場面でNewtonsoft、と使い分ける - 属性
[JsonProperty("key")]でキー名を対応づけできる(System.Text.Jsonの[JsonPropertyName]に相当)
期待される出力
{
"Id": 1,
"Items": [ "本", "ペン" ]
}
最初の商品: 本
まとめ
Newtonsoft.JsonはSerializeObject/DeserializeObject<T>で相互変換する老舗の定番JObjectでスキーマなしに部分取り出しができる- 新規は
System.Text.Json、既存・柔軟性重視はNewtonsoftと使い分ける
テンプレート構成(教材制作用メモ)
114-newtonsoft-json/
├── starter.zip # Newtonsoft.Json導入済み / Program.cs(TODO入り)
└── solution/Program.cs