【C#】jsonを扱う

C#でjsonを扱う時,皆さんはどのようにしていますか?

大抵の場合はNewtonsoft.Jsonというフレームワークを使っているんじゃないでしょうか.

てことで,今回はこのフレームワークの使い方について簡単に解説していきたいと思います.

モジュールをインストール

なんてことはありません.NuGetで見つけてきてください.

Jsonモデルを記述する

今回の記事では,あらかじめ扱うjsonのモデルがわかっている場合を想定します.色々なパターンをつらつらと列挙していきます.

// {"key1":"value1","key2":value2}というフォーマット
[JsonObject]
public class model{
  [JsonProperty("key1")]
  public string key1_;
  [JsonProperty("key2")]
  public string key2_;
}
// {keys:{"key1":"value1","key2":value2}}というフォーマット
[JsonObject]
public class submodel{
  [JsonProperty("key1")]
  public string key1_;
  [JsonProperty("key2")]
  public string key2_;
}
[JsonObject]
public class model{
  [JsonProperty("keys")]
  public submodel key_;
}
// {keyarray:[{"key":"value"...}]}というフォーマット
[JsonObject]
public class submodel{
  [JsonProperty("key")]
  public string key_;
}
[JsonObject]
public class model{
  [JsonProperty("keyarray")]
  public List keyarray_;
}

どうでしょう?これだけ見ればイメージが湧いてきませんか….?要するにjsonモデルがわかっている場合には,それに準じたモデルをそのまま落とし込んでしまえばいいわけです.

シリアライズとデシリアライズ

これに関しては以前、「C#でHTTPリクエスト→JSONレスポンス」という記事で軽く触れましたね.今回の記事ではより詳しく?触れていきたいと思います.

シリアライズ

シリアライズする場合には,JsonConvert.SerializeObjectというメソッドを使用します.見たまんまの通り,引数に与えられたJsonObjectをシリアライズして返してくれるメソッドになります.

ただ,httpリクエストを送るためにはシリアライズしただけではダメで,HttpContent,ひいてはStringContentというものに変換してやらなければいけないわけですね.

var json = JsonConvert.SerializeObject(jsonModel); // 任意のjsonモデル
var content = new StringContent(json, Encoding.UTF8, "application/json");

こうして初めてjsonをリクエストとかに使うことができます.

デシリアライズ

次に,jsonをリクエストで受け取ったりした場合にそれを扱いやすくするためにjsonモデルに変換してやります.この工程をデシリアライズと呼びます.

デシリアライズをするためにはJsonConvert.DeserializeObjectというメソッドを使用します.これも見たまんまですが,引数に与えられた文字列をJsonObjectとして返してくれます.

// 'content'という変数にメッセージボディが格納されているとする.
var response = JsonConvert.DeserializeObject(content);

このメソッドは,例外を吐くことがない(らしい)ので,変換対象となるモデルにkeyが欠如していてもそのままデシリアライズしてくれるみたいです.なので,いらないkeyを敢えて省くことで効率的にコーディングすることができます.

とまぁこんな感じでしょうか.長々と書いてしまいましたが,言っている事はそんなに難しい事じゃありませんよ

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です