LoginSignup
147
142

More than 3 years have passed since last update.

C#でJSONを扱うライブラリ「Json.NET」を使ってみました

Last updated at Posted at 2015-10-26

2020/1/16追記
この記事を投稿してから5年が経過しましたが、
.NET Core 3.0から System.Text.Json が追加されました。
使用感はわかりませんが、Microsoft公式なのでこちらもご検討ください。

Json.NET
http://www.newtonsoft.com/json

C#.NETでJSONのパースを行うライブラリとして、
Json.NETを使ってみましたがとても便利です。

NuGetで導入できます。

シリアライズ

メソッドSerializeObject()を使う。

シリアライズ対象クラス(UserModel)

[JsonObject("user")]
public class UserModel
{
    [JsonProperty("id")]
    public int UserID { get; set; }
    [JsonProperty("name")]
    public string Username { get; set; }
}

シリアライズ処理

var data = new UserModel();
data.UserID = 100;
data.Username = "太郎";

string json = Newtonsoft.Json.JsonConvert.SerializeObject(data);

結果

{
  "id": 100,
  "name": "太郎"
}

デシリアライズ

メソッドDeserializeObject()またはDeserializeObject()を使う。

UserModel model1 = JsonConvert.DeserializeObject<UserModel>(jsonstring);
object model2 = JsonConvert.DeserializeObject(jsonstring);

サンプルでは単純なモデルクラスだが、
階層構造を持ったJSONでも問題なくデシリアライズ可能。
JSON配列もListなどにパースしてくれる。

便利なオプション機能

既定値(DefaultValue、DefaultValueHandling)

既定値を設定するにはSystem.ComponentModel名前空間のDefaultValue属性を利用する。

[JsonObject("user")]
public class UserModel
{
    [JsonProperty("id")]
    public int UserID { get; set; }
    [JsonProperty("name")]
    [DefaultValue("demo")]
    public string Username { get; set; }
}

次に、列挙体DefaultValueHandlingでシリアライズ(デシリアライズ時)の既定値の取り扱い方法を制御します。

DefaultValueHandling

設定値 動作
Include シリアライズ時に既定値の項目をJSONに含める(既定の動作)。
Ignore シリアライズ時に既定値の項目をJSONに含めない。
Populate デシリアライズ時にJSON文字列中に要素が存在しない場合でも既定値を設定する。
IgnoreAndPopulate IgnoreとPopulateの同時指定。

利用方法
プロパティ単位に指定するかシリアライズ(デシリアライズ)時にオプションで指定します。

// プロパティで指定
[JsonProperty("name", DefaultValueHandling = DefaultValueHandling.Ignore)]
public string Username { get; set; }

// シリアライズ時に指定
string json = Newtonsoft.Json.JsonConvert.SerializeObject(model, Formatting.Indented, new JsonSerializerSettings { DefaultValueHandling = DefaultValueHandling.Ignore});

// デシリアライズ時に指定
UserModel model = JsonConvert.DeserializeObject<UserModel>(jsonstring, new JsonSerializerSettings { DefaultValueHandling = DefaultValueHandling.Populate });

以上

147
142
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
147
142