【Unity】JsonUtility解析集合(collections)类型(List)
2023-09-11 14:22:25 时间
Unity自带的Json解析工具类JsonUtility居然没有API用于解析集合类型,也太鬼扯了吧。
- https://stackoverflow.com/questions/36239705/serialize-and-deserialize-json-and-json-array-in-unity
- http://www.boxheadproductions.com.au/deserializing-top-level-arrays-in-json-with-unity/
下面是一个简单的例子:
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吧。
- https://www.newtonsoft.com/json
- http://www.cnblogs.com/guxin/p/csharp-parse-json-by-newtonsoft-json-net.html
由于Unity使用的.Net Framwork版本太低,直接Nuget下载的Newtonsoft.json是不能安装的。报错如下图:
解决办法:
相关文章
- 876. Middle of the Linked List
- Python学习-将list列表写入文件并读取方法汇总
- Java容器 | 基于源码分析List集合体系
- $.ajax()方法详解 ajax之async属性 【原创】详细案例解剖——浅谈Redis缓存的常用5种方式(String,Hash,List,set,SetSorted )
- .NET Core实战项目之CMS 第二章 入门篇-快速入门ASP.NET Core看这篇就够了 [WPF]为旧版本的应用添加触控支持 js css等静态文件版本控制,一处配置多处更新.net版【原创】 C#图片处理,缩略图制作 SqlDataReader 结果集 转成 DataTable DataTable转成List集合 如何使用linq读取DataTable集合?
- C# 中的集合(Array/ArrayList/List<T>/HashTable/Dictionary)
- java中对List中对象排序实现
- 第二十六章 Caché 函数大全 $LIST 函数
- 详解Python列表(list)的方法sort()的第一个参数key【简单清晰明了的讲解】
- List分割:等分成n个list;指定元素个数n等分
- 11Redis - 存储list(命令)
- [LeetCode] Partition List
- SwiftUI List基础之如何从列表list中删除多行(教程含源码)
- 前端传list,springmvc接收list的方法
- python dict list 遍历的几种常见方法
- C#List<T>集合类
- Iterator to list的三种方法
- 【转】Java学习---Java核心数据结构(List,Map,Set)使用技巧与优化
- linq查询结果转换为指定字段类型的list集合
- Java8 使用stream().filter()过滤List(查找符合条件的对象集合)
- java jdk8 使用stream实现两个list集合合并成一个list集合(对象属性的合并)
- 【LeetCode】109. Convert Sorted List to Binary Search Tree
- 【java读书笔记】——Collection集合之六大接口(Collection、Set、List、Map、Iterator和Comparable)
- timeit_list操作测试
- List使用Foreach 修改集合时,会报错的解决方案 (Error: Collection was modified; enumeration operation may not execute. ) - 摘自网络
- 源码阅读(3):Java中主要的List结构——ArrayList集合(上)
- C#-将List里的集合转换成字符串并按指定的字符进行分隔?
- list前面加星号,字典前面加星号
- Java的集合排序:Collections.sort、list.sort和list.stream().sorted方法详解