【Unity】DictionaryをUnityJsonでシリアライズ、デシリアライズ

DictionaryをJson文字列にシリアライズするメソッドと、Json文字列からDictionaryをデシリアライズするメソッドをpublicに変更した例です。

using UnityEngine;
using System.Collections.Generic;

[System.Serializable]
public class DictionaryExample
{
    public Dictionary<string, int> dict = new Dictionary<string, int>()
    {
        {"apple", 5},
        {"banana", 3},
        {"orange", 7}
    };
}

[System.Serializable]
public class SerializableKeyValuePair<K, V>
{
    public K key;
    public V value;
}

[System.Serializable]
public class ListExample
{
    public List<SerializableKeyValuePair<string, int>> list = new List<SerializableKeyValuePair<string, int>>();
}

public class JsonExample : MonoBehaviour
{
    void Start()
    {
        DictionaryExample dictExample = new DictionaryExample();

        // DictionaryをJson文字列にシリアライズする
        string json = SerializeDictionaryToJson(dictExample.dict);

        Debug.Log(json);

        // Json文字列からDictionaryをデシリアライズする
        Dictionary<string, int> deserializedDict = DeserializeJsonToDictionary(json);

        // デシリアライズしたDictionaryをログに表示する
        foreach (KeyValuePair<string, int> pair in deserializedDict)
        {
            Debug.Log(pair.Key + ": " + pair.Value);
        }
    }

    public string SerializeDictionaryToJson(Dictionary<string, int> dict)
    {
        List<SerializableKeyValuePair<string, int>> list = new List<SerializableKeyValuePair<string, int>>();
        foreach (KeyValuePair<string, int> pair in dict)
        {
            SerializableKeyValuePair<string, int> serializablePair = new SerializableKeyValuePair<string, int>();
            serializablePair.key = pair.Key;
            serializablePair.value = pair.Value;
            list.Add(serializablePair);
        }
        ListExample listExample = new ListExample();
        listExample.list = list;
        return JsonUtility.ToJson(listExample);
    }

    public Dictionary<string, int> DeserializeJsonToDictionary(string json)
    {
        ListExample deserializedList = JsonUtility.FromJson<ListExample>(json);
        Dictionary<string, int> deserializedDict = new Dictionary<string, int>();
        foreach (SerializableKeyValuePair<string, int> serializablePair in deserializedList.list)
        {
            deserializedDict.Add(serializablePair.key, serializablePair.value);
        }
        return deserializedDict;
    }
}

Unity

Posted by hidepon