以下の内容はhttps://kan-kikuchi.hatenablog.com/entry/Newtonsoft_Json_Unityより取得しました。


Newtonsoft.Json(Json.NET)をUnityで使う【Unity】




この記事でのバージョン
Unity 6000.0.42f1
Newtonsoft.Json 3.2.1


はじめに

UnityにはJsonUtilityというJSONデータを手軽に扱えるクラスがありますが、



JsonUtilityは手軽に扱える反面、機能がかなり少ないです。


という事で、今回はNewtonsoft.Json(Json.NET)というライブラリの紹介です!

Newtonsoft.Json(Json.NET)

そもそもNewtonsoft.Json(Json.NET) とはなんぞやという所からですが、

C#(.NET)向けの有名なJSON処理ライブラリです。

JsonUtilityと比べて多機能で複雑なデータも扱えますし、Unity用のパッケージもあります。



そしてパッケージの導入はお馴染みPackageManagerからです。


Install package by name…から、

com.unity.nuget.newtonsoft-jsonと入力してInstallを押すだけで、


導入完了です。


使い方も簡単で、

JsonConvertをSerializeObjectでJson化、DeserializeObjectでオブジェクト化します。

using Newtonsoft.Json; //JsonConvertを使うのに必要
//JSON確認用のサンプルクラス
[System.Serializable]
public class SampleData {
  public int number;
  public string text;
}
//サンプル作成
var sample = new SampleData {
  number = 123,
  text = "Hello, World!"
};

//JSONシリアライズ(オブジェクト→JSON)
var json = JsonConvert.SerializeObject(sample);
Debug.Log(json);

//JSONデシリアライズ(JSON→オブジェクト)
var sampleCopy = JsonConvert.DeserializeObject<SampleData>(json);
Debug.Log($"number : {sampleCopy.number}, text : {sampleCopy.text}");


機能をざっくり紹介すると、JsonUtilityで扱えないDictionaryやプロパティが扱えますし、

[System.Serializable]
public class SampleData {
  //DictionaryもJSON化可能
  public Dictionary<string, int> Dict = new Dictionary<string, int> {
    { "apple", 3 },
    { "banana", 5 }
  };

  //プロパティもJSON化可能
  public int Score { get; set; } = 100;
}


「想定外のフィールドがあれば弾く」などの変換設定をする事も可能です。

//Scoreしかないクラス
[System.Serializable]
public class SampleData {
  public int Score { get; set; } = 100;
}
//Scoreだけでなく、Score2もあるJSON
string json = "{\"Score\":100,\"Score2\":100}";

//変換設定を作成
var settings = new JsonSerializerSettings {
  MissingMemberHandling = MissingMemberHandling.Error, //想定外のフィールドがあれば弾く
};

//想定外のフィールド(Score2)があるのでエラーが出る。
var sample = JsonConvert.DeserializeObject<SampleData>(json, settings);


ただし、変換に問題が出た場合はJsonSerializationExceptionという例外を出すので、

検知して処理するにはJsonUtilityと同様にtry-catchを使います。

try {
  var sample = JsonConvert.DeserializeObject<SampleData>(json, settings);
}
catch (Exception e) {
  Debug.Log($"JsonConvertで例外が発生。{e.Message}");
}


これはそもそもJSONとして成り立ってない場合(JSONじゃない、JSONが壊れてる等)も同様です。

var json = "でたらめなjsonじゃない文字列";

try {
  var sample = JsonConvert.DeserializeObject<SampleData>(json);
}
catch (Exception e) {
  Debug.Log($"JsonConvertで例外が発生。{e.Message}");
}






以上の内容はhttps://kan-kikuchi.hatenablog.com/entry/Newtonsoft_Json_Unityより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14