【Unity】JsonUtility解析集合(collections)类型(List)

Unity自带的Json解析工具类JsonUtility居然没有API用于解析集合类型,也太鬼扯了吧。


 下面是一个简单的例子:

Student.json:是一个数组。

[
    {
        "id": "1",
        "name": "A"
    },
    {
        "id": "2",
        "name": "B"
    }
]

解析Json:

// 解析Json的方法
public void ParseItemJson(string jsonStr)
{
    // 将Json中的数组用一个list包裹起来,变成一个Wrapper对象
    jsonStr = "{ "list": " + jsonStr + "}";
    Response<Student> studentList = JsonUtility.FromJson<Response<Student>>(jsonStr);
    foreach (Student item in studentList.list)
    {
        Debug.Log(item.id);
    }
}

// Json解析为该对象
public class Response<T>
{
    public List<T> list;
}

[Serializable]
public class Student
{
    public int id;
    public string name;
}

坑点:

  • Student类中的属性要与Json中的属性一致,大小写敏感!否则能解析为对象,但对象的属性为默认值(int默认0,string默认null等)。
  • Student类要标记为[Serializable],Response类可以不用标记。
  • Json前面拼接的 "list"必须要和Response中的list属性一致,大小写敏感!

根据上面的第三个坑点,对于这种包含数组/集合的数据,后台最好不是直接返回一个数组,而是返回一个对象,对象内部包含一个数组。数据格式如下:

{
    "list": [
        {
            "id": "1",
            "name": "A"
        },
        {
            "id": "2",
            "name": "B"
        }
    ]
}

 JsonUtility用着实在蛋疼,还是换回熟悉的Newtonsoft.json吧。

由于Unity使用的.Net Framwork版本太低,直接Nuget下载的Newtonsoft.json是不能安装的。报错如下图:

解决办法:

原文地址:https://www.cnblogs.com/guxin/p/unity-jsonutility-parse-list-object.html