Unity List和 Dictionry序列化成json

工具类-SerializeDictionary、SerializeList

unity JsonUtility无法直接将List和Dictionary直接序列化成json ,序列化出的结果为{}

如下测试代码:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;

public class Serialization:MonoBehaviour
{
    private void Start()
    {
        List<string> list = new List<string>();
        Dictionary<string, string> dic = new Dictionary<string, string>();

        for (int index = 0;index<10;index++)
        {
            list.Add("listvalue_"+index);
            dic.Add("key_" + index, "value_" + index);
        }
        string list_json = JsonUtility.ToJson(list);
        Debug.Log("list to json: "+ list_json);

        string dic_json = JsonUtility.ToJson(dic);
        Debug.Log("dic to json: " + dic_json);
    }
}

测试结果如下:

所以 需要对需要序列化的数据进行一些处理。当然也可以使用Json.Net进行序列化 反序列化,这里不作过多介绍。

以下是封装后的工具类:

/*********************序列化/反序列化Dictionary***********************/
using System.Collections.Generic;
using Unit

  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
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 字符串中加载了一个新的对象,并输出了其中的两个值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值