博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unity中解决JsonUtility转换数组失败的BUG
阅读量:6692 次
发布时间:2019-06-25

本文共 2172 字,大约阅读时间需要 7 分钟。

在使用Unity官方提供的JsonUtility类进行JSON转换时,发现一旦转换数组就会出现问题。

解决转换数组的问题之后整理一下代码并做个记录。

BUG现象:

using UnityEngine;public class JsonTest : MonoBehaviour {    private void Start () {        string json = "[1, 2, 3]";        int[] array = new int[] { 1, 2, 3 };        // 数组转Json        print(JsonUtility.ToJson(array));   // 结果: {}        // Json转数组        print(JsonUtility.FromJson
(json)); // 错误:ArgumentException: JSON must represent an object type. } }

解决后:

using UnityEngine;public class JsonTest : MonoBehaviour {    private void Start () {        string json = "[1, 2, 3]";        int[] array = new int[] { 1, 2, 3 };        // 数组转Json        print(JsonUtil.toJson(array));      // 结果:[1,2,3]        print(JsonUtility.ToJson(array));   // 结果: {}        // Json转数组        print(JsonUtil.fromJson
(json)); // 结果:System.Int32[] print(JsonUtility.FromJson
(json)); // 错误:ArgumentException: JSON must represent an object type. } }

解决思路:

由于转对象没问题,转数组才会产生问题。所以解决思路是:

转换时遇到数组,在数组外加壳,作为对象转成JSON,再去壳。
解析时遇到数组,先套壳转成对象,再取对象里的数组。

JsonUtil类:

using UnityEngine;/// /// Json转换工具类/// 
解决JsonUtility转换数组失败的问题
///
ZhangYu 2018-05-09
///
public static class JsonUtil { /// 把对象转换为Json字符串 /// 对象 public static string toJson
(T obj) { if (obj == null) return "null"; if (typeof(T).GetInterface("IList") != null) { Pack
pack = new Pack
(); pack.data = obj; string json = JsonUtility.ToJson(pack); return json.Substring(8, json.Length - 9); } return JsonUtility.ToJson(obj); } ///
解析Json ///
类型
///
Json字符串 public static T fromJson
(string json) { if (json == "null" && typeof(T).IsClass) return default(T); if (typeof(T).GetInterface("IList") != null) { json = "{\"data\":{data}}".Replace("{data}", json); Pack
Pack = JsonUtility.FromJson
>(json); return Pack.data; } return JsonUtility.FromJson
(json); } ///
内部包装类 private class Pack
{ public T data; }}

转载地址:http://vwjoo.baihongyu.com/

你可能感兴趣的文章
转 【转载】 SYN cookies 机制下连接的建立
查看>>
ExtJS 4.2 教程-02:bootstrap.js 工作方式
查看>>
利用jquery制作闪动标题
查看>>
SQLServer · 最佳实践 · 数据库实现大容量插入的几种方式
查看>>
AWK文本处理工具(Linux)
查看>>
JavaEE 获取路径全攻略
查看>>
使用mina解析http协议的使用
查看>>
Code Review for Vue 2.0 Preview
查看>>
java8 去掉 perm 用 Metaspace 来替代
查看>>
jQuery-鼠标经过激活效果
查看>>
HTML5_Canvas(2)
查看>>
ENode框架Conference案例分析系列之 - 上下文划分和领域建模
查看>>
Kettle dependency management
查看>>
看美剧英文字幕学英语的利器——“深蓝英文字幕助手”简介
查看>>
使用IntelliJ IDEA 13搭建Android集成开发环境(图文教程)
查看>>
使用JDBC对数据库进行查询的前期准备工作,以及简单的JDBC访问MySQL数据库(Mac)...
查看>>
SOA面向服务架构的概念及应用
查看>>
控制器属性传值的一些小问题
查看>>
【Http协议】深入理解HTTP协议
查看>>
关于C/C++一些面试/笔试题的反思(超基础的知识点)
查看>>