Unityにおける列挙型のJSON変換に関する技術資料
Unityの開発では、列挙型(enum
)は状態の管理やオプション選択に便利です。列挙型のデータをJSON形式で保存したり通信に使用したりすることがしばしば求められます。本資料では、Unityで列挙型をJSONに変換する方法を説明し、JsonUtility
、Newtonsoft.Json
、および System.Text.Json
の各ライブラリでのシリアライズの挙動を比較します。
1. JsonUtility
による列挙型のシリアライズ
Unityの標準的なシリアライズライブラリであるJsonUtility
を使用すると、列挙型は数値としてシリアライズされます。列挙型の各値に対して定義された整数値が使用され、シンプルな出力が得られます。
サンプルコード
using UnityEngine;
public class MyClass
{
public MyEnum myEnum;
}
public enum MyEnum
{
FirstOption = 0,
SecondOption = 1,
ThirdOption = 2
}
public class TestJson : MonoBehaviour
{
void Start()
{
MyClass obj = new MyClass { myEnum = MyEnum.SecondOption };
string json = JsonUtility.ToJson(obj);
Debug.Log(json); // 出力: {"myEnum":1}
}
}
出力例
{"myEnum":1}
この例では、列挙型のメンバ MyEnum.SecondOption
が数値 1
としてシリアライズされています。
2. Newtonsoft.Json
による列挙型のシリアライズ
Newtonsoft.Json
はC#でよく使われるサードパーティライブラリであり、Unityプロジェクトにも導入可能です。このライブラリでは、列挙型をデフォルトで文字列としてシリアライズします。ただし、設定により数値としてもシリアライズ可能です。
サンプルコード(デフォルト設定)
using Newtonsoft.Json;
public class MyClass
{
public MyEnum myEnum;
}
public enum MyEnum
{
FirstOption = 0,
SecondOption = 1,
ThirdOption = 2
}
public class TestJson
{
public static void Main()
{
MyClass obj = new MyClass { myEnum = MyEnum.SecondOption };
string json = JsonConvert.SerializeObject(obj);
Console.WriteLine(json); // 出力: {"myEnum":"SecondOption"}
}
}
出力例
{"myEnum":"SecondOption"}
数値としてシリアライズする方法
列挙型を数値としてシリアライズするには、JsonSerializerSettings
を使用します。
string json = JsonConvert.SerializeObject(obj, new JsonSerializerSettings
{
Converters = new[] { new Newtonsoft.Json.Converters.StringEnumConverter() },
Formatting = Formatting.Indented
});
3. System.Text.Json
による列挙型のシリアライズ
.NET Core
や.NET 5+
で導入されたSystem.Text.Json
も、列挙型をデフォルトで文字列としてシリアライズしますが、設定によって数値に変えることが可能です。
サンプルコード(デフォルト設定)
using System.Text.Json;
public class MyClass
{
public MyEnum myEnum;
}
public enum MyEnum
{
FirstOption = 0,
SecondOption = 1,
ThirdOption = 2
}
public class TestJson
{
public static void Main()
{
MyClass obj = new MyClass { myEnum = MyEnum.SecondOption };
string json = JsonSerializer.Serialize(obj);
Console.WriteLine(json); // 出力: {"myEnum":"SecondOption"}
}
}
出力例
{"myEnum":"SecondOption"}
数値としてシリアライズする方法
var options = new JsonSerializerOptions
{
Converters = { new JsonStringEnumConverter() }
};
string json = JsonSerializer.Serialize(obj, options);
比較まとめ
ライブラリ | デフォルトのシリアライズ | 数値でのシリアライズ |
---|---|---|
Unity JsonUtility | 数値 | – |
Newtonsoft.Json | 文字列 | 設定で数値に変更可 |
System.Text.Json | 文字列 | 設定で数値に変更可 |
まとめ
Unityのプロジェクトで列挙型をJSON形式に変換する場合、JsonUtility
では数値として扱われますが、他のライブラリ(Newtonsoft.Json
やSystem.Text.Json
)ではデフォルトで文字列として扱われます。シリアライズ方式を選択する際は、プロジェクトの要件に応じて適切なライブラリと設定を選ぶことが重要です。
ディスカッション
コメント一覧
まだ、コメントがありません