トップ > 【Unity】System.Text.JsonでTaskを利用した非同期処理をしよう!
更新日 2024/5/5

【Unity】System.Text.JsonでTaskを利用した非同期処理をしよう!

UnityではJSONを扱うためにJsonUtilityクラスが提供されています。JSONはネットワーク通信やIO周りで利用することが多いのにTaskの非同期処理には対応していないので非常に不便です。System.Text.Jsonを利用すれば非同期処理に対応されているので簡潔に並列処理を実装することができます。

System.Text.Json thumbnail
ツールバージョン
Unity Editor2022.3.26f1
System.Text.Json8.0.3

UnityのJsonUtilityによるJSONの取り扱いはこちらの記事をご覧下さい。

json
【Unity】UnityでJSONを扱う方法を紹介します!配列のシリアライズ対応方法やディープコピーのテクニックなども紹介しますよ!2024/3/28

JSONの非同期処理をしたいけど、どうやれば簡単に記述できるかな?

初めての方にも分かりやすく簡単に解説しますね。

準備

まず初めに必要なDLLを用意しよう!

NuGet GalleryからSystem.Text.Json本体と依存パッケージ3つの合わせて4つのパッケージをダウンロードします。

https://www.nuget.org/packages/System.Text.Json/

microsoft.bcl.asyncinterfaces.8.0.0.nupkg
system.runtime.compilerservices.unsafe.6.0.0.nupkg
system.text.encodings.web.8.0.0.nupkg
system.text.json.8.0.3.nupkg

解凍してlib/netstandard2.0フォルダー以下にあるDLLをUnityのAssets以下へコピーします。

nupkgはzip形式なので拡張子をzipに変更して解凍できますよ。

使い方

JsonUtilityの使い方をおさらいしよう!

UnityのJsonUtilityクラスで利用するためにSystem.Serializable属性を付加してpublicまたは、SerializeField属性の非publicメンバーがシリアライズされます。

[System.Serializable]
class Item
{
public string name; // 1

[SerializeField]
private int price; // 2
}

JsonUtility.FromJsonでデシリアライズできます。

string json = "{\"name\":\"ひのきのぼう\",\"price\":5}";

Item item = JsonUtility.FromJson<Item>(json);

System.Text.Jsonの場合はどうなるのかな?

System.Text.JsonのJsonSerializerはpublicなプロパティーもシリアライズしてくれます。属性も付加する必要もなくキレイに実装できます。

class Item
{
public string name { get; set; }
public int price { get; set; }
}

JsonSerializer.Deserializeでデシリアライズできます。

string json = "{\"name\":\"ひのきのぼう\",\"price\":5}";

Item item = JsonSerializer.Deserialize<Item>(json);

非同期デシリアライズ処理はJsonSerializer.DeserializeAsyncを利用します。

async Task<Item> DeserializeAsync(string json)
{
var ms = new MemoryStream(Encoding.UTF8.GetBytes(json));
return await JsonSerializer.DeserializeAsync<Item>(ms);
}

var task = Task.Run(() => DeserializeAsync(json));

簡潔に非同期処理を実装できそうだね!

JsonUtilityでは対応していない配列のシリアライズもできるから便利ですね。

まとめ

今回の記事のまとめだよ!

・System.Text.JsonをUnityに導入しよう!
・JSONを非同期処理できるようになるよ!
・配列のシリアライズにも対応しているよ!

JSONを非同期処理できるようになると便利だね!

JSONを利用するコンテンツ開発が増えているので積極的に利用しましょう。

関連ページ

こちらのページも合わせてご覧下さい

json
【Unity】UnityでJSONを扱う方法を紹介します!配列のシリアライズ対応方法やディープコピーのテクニックなども紹介しますよ!2024/3/28
singleton
【Unity】シングルトンパターンを実装する方法を紹介します!2024/3/1
resident_object
【Unity】ゲームオブジェクトを常駐化させるための方法を紹介します!2024/3/1
http_client_manager
【Unity】HttpClientをシングルトン化したHttpClientManagerの実装方法について紹介します!2024/3/1
event_init
【Unity】MonoBehaviourの初期化イベントについて考察します!2024/2/12

Copyright ©2022 - 2024 うにぉらぼ