UnityでSystem.Text.Jsonを使ってJSONをデシリアライズ(導入編)

UnityでSystem.Text.Jsonを使ってJSONをデシリアライズ(導入編)

UnityでGoogle CGI API for Japanese Inputの結果をパースしたくて、System.Text.Jsonを導入しました。今回の導入編ではSystem.Text.Jsonをnugetから入手して導入し、Sceneを今まで通り実行するまでの手順を紹介します。

System.Text.Jsonをプロジェクトに導入

以下の記事のセクション「NuGetからUnityプロジェクトにパッケージを追加する」を参考にします。

Unity で .NET 4 以降のバージョンの構文と言語機能を確認し、スクリプト ランタイムを有効にして、.NET の互換性を演習します。
docs.microsoft.com

System.Text.Jsonのダウンロード

NuGetのサイトから、該当のパッケージをダウンロードします。

.dllファイルの解凍とインポート

.nupkgファイルの拡張子を.zipに書き換えて、中のlib/netstandard2.0/System.Text.Json.dll ファイルをAsset/Pluginsフォルダにコピー&ペーストします。この作業はWindowsのエクスプローラーを使って行います。

.nupkgを.zipに書き換えることで、中が見られる
エクスプローラでAssets/Pluginsフォルダにコピーする

アセンブリ依存関係の解決

コピーした後、Unityにフォーカスするとコンパイルが走ります。その後、参照しているアセンブリが見つからない旨のコンパイルエラーが表示されます。足りないと言われているアセンブリをnugetで探してきて、System.Text.Json同様にAsset/Pluginsフォルダに放り込んでいきます。依存関係がツリー状になっていてdllを導入したそばから新しいコンパイルエラーが出るので、慌てず同じように淡々と導入を続けます。

コンパイルエラーのイメージ

コンパイルエラーが消え、実行するとさらに同じようなアセンブリ参照のエラーが出るので、それも導入します。

最終的には以下のdllを導入することで、アセンブリ参照の問題を解消できました。

  • Microsoft.Bcl.AsyncInterfaces.dll
  • System.Buffers.dll
  • System.Memory.dll
  • System.Runtime.CompilerServices.Unsafe.dll
  • System.Text.Encodings.Web.dll
  • System.Text.Json.dll
  • System.Threading.Tasks.Extensions.dll

以下のフォーラムの書き込み#17の通りですね。

足りないと言われるものを片っ端から導入して、こうなった

参照切れオブジェクトの再設定

導入を行った後、なぜかScene上のオブジェクトたちのスクリプトのpublicメンバーの参照が切れてしまっていたので、設定しなおしました。