0x01:前言

Unity 5.3加入了UnityUtility类,意味着Unity终于有了自己原生态的JSON库。Unity主要用来游戏开发,JSON做为游戏开发中最受欢迎的配置文件。在官方没有库支持的时候,大家都使用不同的库,我们的项目选择了LitJson,是否选用官方的JSON,只有对比之后才能知道结论。

0x02:如何使用

定义类:

[System.Serializable]
class Buff
{
public int id;
public string description;
public double baseAttack;
public bool canRepeat;
} [System.Serializable]
class PlayerInfo
{
public int id;
public string name;
public List<Buff> buffList;
}

初始化对象:

 PlayerInfo playerInfo = new PlayerInfo
{
id = 1001,
name = "lfwu",
buffList = new List<Buff>
{
new Buff
{
id = 1001001,
description = "this buff can reduce speed",
baseAttack = 20.0,
canRepeat = false
},
new Buff
{
id = 1001002,
description = "this buff can increase physic attack",
baseAttack = 0,
canRepeat = true
}
}
};

Unity3d 调用方式:

序列化:

string jsonStr = JsonUtility.ToJson(playerInfo);

反序列化:

PlayerInfo playerInfo = JsonUtility.FromJson<PlayerInfo>(jsonStr);

LitJson 调用方式:

序列化:

string jsonStr = JsonMapper.ToJson(playerInfo);

反序列化:

PlayerInfo playerInfo = JsonMapper.ToObject<PlayerInfo>(jsonStr);

结论:

1、使用方式没多大区别

2、LitJson提供了更多的接口,支持返回Object 对象,UnityJson 反序列化只支持对象

3、UnityJson类型必须加 [System.Serializable]属性

4、LitJson有源代码

5、UnityJson只支持Object json 字符串

string jsonObjStr = "{\"obj\":{}}"; // 只支持对象json
string jsonArrStr = "[]"; // 不支持

0x03:性能比较

序列化

通过统计解析耗费时间来对比:

sw.Start();
for(var i = 0; i < count; ++i)
{
litJsonStr = JsonMapper.ToJson(playerInfo);
}
Debug.Log("LitJson Serialize use time:" + sw.ElapsedMilliseconds); sw.Reset();
sw.Start();
for(var i = 0; i < count; ++i)
{
unityJsonStr = JsonUtility.ToJson(playerInfo);
}
Debug.Log("UnityJson Serialize use time:" + sw.ElapsedMilliseconds);

反序列化

sw.Reset();
sw.Start();
for(var i = 0; i < count; ++i)
{
PlayerInfo litPlayerInfo = JsonMapper.ToObject<PlayerInfo>(litJsonStr);
}
Debug.Log("LitJson Deserialzie use time:" + sw.ElapsedMilliseconds); sw.Reset();
sw.Start(); for(var i = 0; i < count; ++i)
{
PlayerInfo unityJsonInfo = JsonUtility.FromJson<PlayerInfo>(litJsonStr);
}
Debug.Log("UnityJson Deserialize use time:" + sw.ElapsedMilliseconds);

序列化和反序列化结果:

序列化字符串长度

结论:

1、Unity3d在序列化和反序列化效率完胜LitJson

2、序列化后的字符串内容和长度一致

0x04:总结

在选择使用库的时候,我们通常要考虑一下问题:

1、易用性

2、效率性能

3、可维护性

4、稳定性

通过对比测试,欢快的使用UnityJson吧。

0x05:说明

1、Unity版本5.4, LitJson 0.9

2、画图使用Excel

3、参考Unity官方,LitJson GitHub

4、完整代码点击这里

欢快的使用Unity JSON吧的更多相关文章

  1. Unity Json解析IPA

    今天看到一个unity 自带的解析json的IPA,感觉比litjson好用很多,废话不多,上代码 using System.Collections; using System.Collections ...

  2. Unity Json 之三

    今天在网上看到一个simplejson,直接调用这两个API就可以了,简单易用 string jsonstr = SimpleJson.SimpleJson.SerializeObject(json) ...

  3. Unity json

    MiniJSON.cs using UnityEngine; using System; using System.Collections; using System.Collections.Gene ...

  4. unity json解析IPA后续

    以前说到的,有很大的限制,只能解析简单的类,如果复杂的就会有问题,从老外哪里看到一片博客,是将类中的list   等复杂对象序列化, using UnityEngine; using System.C ...

  5. Unity的Json解析<二>–写Json文件

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/50378805 作者:car ...

  6. C#开源

    商业协作和项目管理平台-TeamLab 网络视频会议软件-VMukti 驰骋工作流程引擎-ccflow [免费]正则表达式测试工具-Regex-Tester Windows-Phone-7-SDK E ...

  7. C# 开源项目一

    商业协作和项目管理平台-TeamLab 网络视频会议软件-VMukti 驰骋工作流程引擎-ccflow [免费]正则表达式测试工具-Regex-Tester Windows-Phone-7-SDK E ...

  8. C#开源大全--汇总(转)

    商业协作和项目管理平台-TeamLab 网络视频会议软件-VMukti 驰骋工作流程引擎-ccflow [免费]正则表达式测试工具-Regex-Tester Windows-Phone-7-SDK E ...

  9. C#开源大全--汇总

    商业协作和项目管理平台-TeamLab 网络视频会议软件-VMukti 驰骋工作流程引擎-ccflow [免费]正则表达式测试工具-Regex-Tester Windows-Phone-7-SDK E ...

随机推荐

  1. java-类

    浏览以下内容前,请点击并阅读 声明 java是面向对象的语言,而对象的创建,则需要借助类,类可以说是一个创建对象的模具(个人理解). 类的定义 以下构成定义类的最简单(不能再简单)语句: class ...

  2. BZOJ2080 : [Poi2010]Railway

    如果存在$k$使得$i<j<k$,且$a[k]<a[i]<a[j]$,那么$i$和$j$不能在一个栈中. 设$b[i]=\min(a[i..n])$,如果$b[j]<a[ ...

  3. BZOJ3873 : [Ahoi2014]拼图

    如果答案在某个碎片内部,那么直接悬线法解决,时间复杂度$O(n\sum)$. 如果$n$比较大,那么$\sum$比较小. 求出每个点向上能延伸的长度,枚举每个点向上这条线段作为短板. 算出完全可选的碎 ...

  4. gulp完全开发指南 => 快来换掉你的Grunt吧

    最近一直在构建Angular应用,通过bower管理前端包依赖,然后通过gulp和它配合.发现gulp相比于grunt真的很轻,现在我的项目中已经取代了grunt.这里把我的一些实践贴记录下来和大家分 ...

  5. odeforces Beta Round #77 (Div. 2 Only)

    A. Football time limit per test 2 seconds memory limit per test 256 megabytes input standard input o ...

  6. Leetcode Maximum Depth of Binary Tree

    Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the long ...

  7. [WP8.1UI控件编程]Windows Phone自定义布局规则

    3.2 自定义布局规则 上一节介绍了Windows Phone的系统布局面板和布局系统的相关原理,那么系统的布局面板并不一定会满足所有的你想要实现的布局规律,如果有一些特殊的布局规律,系统的布局面板是 ...

  8. HDU 4722 Good Numbers(DP)

    题目链接 脑子有点乱,有的地方写错了,尚大婶鄙视了... 来个模版的. #include <iostream> #include <cstdio> #include <c ...

  9. ubuntu 装机及装机以后干的事情

    一.装系统 下载ubuntu镜像 ubuntu 16.04 镜像下载(linux公社) 安装unetbootin (u盘启动盘制作工具) sudo apt-get install unetbootin ...

  10. Maven3路程(一)用Maven创建第一个web项目(2)

    工具/原料 Windows 系统 JDK 1.5 及以上版本 Maven 3.0 及以上版本 方法/步骤 1 首先检查Eclipse是否已经添加的Maven插件,打开Eclipse, 依次选择 &qu ...