unity Dictionary序列化和反序列化 json
时间: 2023-07-18 22:27:48 浏览: 149
Unity-JsonNet.9.0.1.zip
在 Unity 中,我们可以使用 JsonUtility 类来实现对象的序列化和反序列化。对于 Dictionary 类型的对象,我们可以通过将其转换为一个包含键值对的 List 类型对象,然后对 List 类型对象进行序列化和反序列化。
下面是一个示例代码:
```csharp
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]
public class SerializableDictionary<TKey, TValue> : Dictionary<TKey, TValue>, ISerializationCallbackReceiver
{
[SerializeField]
private List<TKey> keys = new List<TKey>();
[SerializeField]
private List<TValue> values = new List<TValue>();
// save the dictionary to lists
public void OnBeforeSerialize()
{
keys.Clear();
values.Clear();
foreach (KeyValuePair<TKey, TValue> pair in this)
{
keys.Add(pair.Key);
values.Add(pair.Value);
}
}
// load dictionary from lists
public void OnAfterDeserialize()
{
this.Clear();
for (int i = 0; i < keys.Count; i++)
{
this.Add(keys[i], values[i]);
}
}
}
[System.Serializable]
public class MyData
{
public SerializableDictionary<string, int> myDict = new SerializableDictionary<string, int>();
}
public static class JsonHelper
{
public static string ToJson<T>(T obj)
{
return JsonUtility.ToJson(obj);
}
public static T FromJson<T>(string json)
{
return JsonUtility.FromJson<T>(json);
}
}
public class Example : MonoBehaviour
{
private MyData data = new MyData();
private void Start()
{
data.myDict.Add("key1", 1);
data.myDict.Add("key2", 2);
string json = JsonHelper.ToJson(data);
Debug.Log(json);
MyData loadedData = JsonHelper.FromJson<MyData>(json);
Debug.Log(loadedData.myDict["key1"]);
Debug.Log(loadedData.myDict["key2"]);
}
}
```
在上面的示例代码中,我们定义了一个 SerializableDictionary 类来实现 Dictionary 的序列化和反序列化。在 MyData 类中使用了 SerializableDictionary 类型的成员变量 myDict。在 JsonHelper 类中,我们定义了 ToJson 和 FromJson 方法来将对象转换为 Json 字符串和从 Json 字符串中加载对象。在 Example 类中,我们创建了一个 MyData 对象,并向其中添加了两个键值对。我们将 MyData 对象转换为 Json 字符串并输出到控制台,然后从 Json 字符串中加载了一个新的对象,并输出了其中的两个值。
阅读全文