C#
JSON
Json.NET

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

More than 3 years have passed since last update.

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 });

以上