じゃがいも畑

開発ネタの記録

【C#】一番手っ取り早いSystem.Text.Jsonのデシリアライズ

年に1回ぐらいJsonを扱うんだけど、毎回忘れるので手順を残します
Jsonのデシリアライズでつまずきたくない人向け

※サンプル作成にあたり、以下のWebサイト様&WebAPIを使用させていただきました
ありがとうございました

blog.tsukumijima.net

シリアライズするJson

{ "publicTime": "2021-01-09T17:00:00+09:00", "publicTime_format": "2021/01/09 17:00:00", "title": "東京都 東京 の天気", "link": "https://www.jma.go.jp/jp/yoho/319.html", "description": { "text": "東京都では、強風や高波、急な強い雨、落雷、空気の乾燥した状態が続くため、火の取り扱い、霜に対する農作物の管理に注意してください。\n\n日本付近は、強い冬型の気圧配置となっています。\n\n東京地方は、晴れや曇りとなっています。\n\n9日は、強い冬型の気圧配置が続きますが、気圧の谷や湿った空気の影響を受けるため、晴れ時々曇りとなるでしょう。伊豆諸島では、雷を伴い雪や雨の降る所がある見込みです。\n\n10日は、冬型の気圧配置は次第に緩み、高気圧に覆われますが、気圧の谷や湿った空気の影響を受けるため、晴れで朝晩は曇りとなる見込みです。伊豆諸島では、雷を伴い雪や雨の降る所がある見込みです。\n\n<天気変化等の留意点>\n伊豆諸島南部では、9日は、曇りで雷を伴い雪や雨の降る所があるでしょう。\n10日は、曇りで雷を伴い雪や雨の降る所がある見込みです。\n(雨の予想)\n9日18時から10日18時までに予想される24時間降水量は、多い所で、伊豆諸島南部20ミリの見込みです。\n\n【関東甲信地方】\n関東甲信地方は、晴れや曇りで、雪の降っている所があります。\n\n9日は、強い冬型の気圧配置が続くため、晴れや曇りで、長野県や関東地方北部では雪の降る所があるでしょう。伊豆諸島では、雷を伴って雪や雨の降る所がある見込みです。\n\n10日は、冬型の気圧配置は次第に緩み、高気圧に覆われますが、気圧の谷や湿った空気の影響を受ける見込みです。このため、晴れや曇りで、長野県や関東地方北部では雪の降る所があるでしょう。伊豆諸島では、雷を伴って雪や雨の降る所がある見込みです。\n\n関東地方と伊豆諸島の海上では、9日から10日にかけて、うねりを伴いしけるでしょう。船舶は高波に注意してください。", "publicTime": "2021-01-09T16:35:00+09:00", "publicTime_format": "2021/01/09 16:35:00" }, "forecasts": [ { "date": "2021-01-09", "dateLabel": "今日", "telop": "晴時々曇", "temperature": { "min": null, "max": null }, "chanceOfRain": { "00-06": "--%", "06-12": "--%", "12-18": "--%", "18-24": "10%", "T00_06": "--%", "T06_12": "--%", "T12_18": "--%", "T18_24": "10%" }, "image": { "title": "晴時々曇", "url": "https://weather.tsukumijima.net/icon/2.gif", "width": 50, "height": 31 } }, { "date": "2021-01-10", "dateLabel": "明日", "telop": "晴時々曇", "temperature": { "min": { "celsius": "-2", "fahrenheit": "28.4" }, "max": { "celsius": "6", "fahrenheit": "42.8" } }, "chanceOfRain": { "00-06": "10%", "06-12": "0%", "12-18": "0%", "18-24": "10%", "T00_06": "10%", "T06_12": "0%", "T12_18": "0%", "T18_24": "10%" }, "image": { "title": "晴時々曇", "url": "https://weather.tsukumijima.net/icon/2.gif", "width": 50, "height": 31 } }, { "date": "2021-01-11", "dateLabel": "明後日", "telop": "曇時々晴", "temperature": { "min": null, "max": null }, "chanceOfRain": { "00-06": "--%", "06-12": "--%", "12-18": "--%", "18-24": "--%", "T00_06": "--%", "T06_12": "--%", "T12_18": "--%", "T18_24": "--%" }, "image": { "title": "曇時々晴", "url": "https://weather.tsukumijima.net/icon/9.gif", "width": 50, "height": 31 } } ], "location": { "city": "東京", "area": "関東", "prefecture": "東京都" }, "copyright": { "link": "https://weather.tsukumijima.net/", "title": "(C) 天気予報 APIlivedoor 天気互換)", "image": { "width": 120, "height": 120, "link": "https://weather.tsukumijima.net/", "url": "https://weather.tsukumijima.net/logo.png", "title": "天気予報 APIlivedoor 天気互換)" }, "provider": [ { "link": "https://www.jma.go.jp/jma/", "name": "気象庁 Japan Meteorological Agency", "note": "気象庁 HP にて配信されている天気予報を json データへ編集しています。" } ] } }

NugetパッケージにSystem.Text.Jsonを追加

「text.json」とかで検索をかけてインストールを押す f:id:whitedog0215:20210109233552p:plain

Jsonをデシリアライズするためのクラスを作る

とりあえず、Tenkiとか名前を付けてファイルを作成

f:id:whitedog0215:20210110000656p:plain

Jsonデータをコピーして、Visual Studioの「編集」-> 「形式を選択して貼り付け」-> 「Jsonをクラスとして貼り付ける」を選択

f:id:whitedog0215:20210110000740p:plain

こんな感じでクラスが自動生成される。超便利。
クラス名がRootObjectになっているので修正しておく
f:id:whitedog0215:20210110001128p:plain

「形式を選択して貼り付け」が無い場合

Visual Studio Installerから「ASP.NETとWeb開発」のコンポーネントを追加する

f:id:whitedog0215:20210110000855p:plain

シリアライズする

以下のコードでデシリアライズを実行する。

var tenki = JsonSerializer.Deserialize<Tenki>(jsonStr);

f:id:whitedog0215:20210110002511p:plain

ちゃんとできてますね。