【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是不能安装的。报错如下图:

解决办法:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值