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. MR并行算法编程过程中遇到问题的思考

    1. Reducer 类中 reduce函数外定义的变量是在Reducer机器上属于全局变量的,因此,一台机器上reduce函数均可以对该变量的值做出贡献.如代码:(sum和count数据Reduce ...

  2. 使用CSS代码修改博客模板

    在修改设置使公告栏里的头像更新为新的头像时发现里边还有“页面定制CSS代码”这一选项,查了一下发现这东西可以对页面做一些个性化的调整.正好目前我使用的这个模板标题和导航栏的字体实在难看,顺手修改了一下 ...

  3. HDU5823 : color II

    每种颜色的点集肯定是独立集,因此可以通过$O(2^n)$枚举每个集合判断出每个集合是否只需要一种颜色即可染色. 设$f[i][S]$表示$i$种颜色覆盖$S$这个集合的方案数,假定两个集合可以相交,那 ...

  4. 前端构建之gulp与常用插件

    gulp是什么? http://gulpjs.com/ 相信你会明白的! 与著名的构建工具grunt相比,有什么优势呢? 易于使用,代码优于配置 高效,不会产生过多的中间文件,减少I/O压力 易于学习 ...

  5. XCOJ 1103 (LCA+树链最大子段和)

    题目链接: http://xcacm.hfut.edu.cn/problem.php?id=1103 题目大意:链更新.链查询,求树链的最大子段和.(子段可以为空) 解题思路: 将所有Query离线存 ...

  6. 【BZOJ3439】Kpm的MC密码 trie树+主席树

    Description 背景 想Kpm当年为了防止别人随便进入他的MC,给他的PC设了各种奇怪的密码和验证问题(不要问我他是怎么设的...),于是乎,他现在理所当然地忘记了密码,只能来解答那些神奇的身 ...

  7. RCA:未注意Curl-library Post 1024以上字节时的HTTP/1.1特性导致 HessianPHP 传输数据失败

    先列出 HessianPHP 的错误提示: CURL transport error: transfer closed with outstanding read data remaining 基础知 ...

  8. 百度ueditor 拖文件或world 里面复制粘贴图片到编辑中 上传到第三方问题

    我这边从world 里面复制粘贴图片到编辑器中,它自动给我上传了,但是我是用的第三方的要设置一个token值,我找了很久,也没有找到应该在哪里设置这个上传的参数,如果是点击图片上传,我知道在dialo ...

  9. C#常用方法二

    public sealed class StringTool { /// <summary> /// 将txt文件读入字符串 /// </summary> /// <pa ...

  10. Javascript 异步编程的4种方法

    你可能知道,Javascript语言的执行环境是"单线程"(single thread). 所谓"单线程",就是指一次只能完成一件任务.如果有多个任务,就必须排 ...