【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;
}
}
ディスカッション
コメント一覧
まだ、コメントがありません