コガネブログ

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

【Unity】JsonUtility の「Unexpected node type.」を例外としてキャッチする方法

概要

using System;
using UnityEngine;

public class Example : MonoBehaviour
{
    public T Hoge<T>( string json )
    {
        var isError = false;

        void OnReceive( string condition, string trace, LogType type )
        {
            if ( type != LogType.Error && type != LogType.Assert && type != LogType.Exception ) return;

            isError = true;

            Application.logMessageReceivedThreaded -= OnReceive;
        }

        Application.logMessageReceivedThreaded += OnReceive;

        var result = JsonUtility.FromJson<T>( json );

        Application.logMessageReceivedThreaded -= OnReceive;

        if ( isError )
        {
            throw new Exception();
        }

        return result;
    }
}
  • JsonUtility で変換失敗時に発生する「Unexpected node type.」は
    例外ではなくエラーログのため try~catch できない
  • 例外として扱いたい場合は上記のコードのように
    Application.logMessageReceivedThreaded を使用する