コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【C#】System.Text.Json で列挙型を文字列でシリアライズする方法

概要

using System.Text.Json;
using UnityEngine;

public enum CharacterType
{
    NONE,
    PLAYER,
    ENEMY,
}

public class Example : MonoBehaviour
{
    private void Start()
    {
        var data = new { characterType = CharacterType.PLAYER };

        Debug.Log( JsonSerializer.Serialize( data ) );
    }
}

列挙型の要素を持つ型を普通に JSON にシリアライズすると

{"characterType":1}

上記のように列挙型の値は数値で表示される
列挙型の値を要素の名前でシリアライズしたい場合は

var options = new JsonSerializerOptions
{
    Converters = { new JsonStringEnumConverter( JsonNamingPolicy.CamelCase ) },
};

Debug.Log( JsonSerializer.Serialize( data, options ) );

上記のようにオプションを指定する

{"characterType":"player"}

オプションを指定すると列挙型の値を要素の名前でシリアライズできる