现在新版的Unity(印象中是从5.3开始)已经提供了原生的Json库,以前一直使用LitJson,研究了一下Unity用的JsonUtility工具类的使用,发现使用还挺方便的,所以打算把项目中的Json库换成Unity原生的。在Unity3D开发中Json有什么用呢?下面就来说说Json在Unity中的使用。
一、Json有什么用?
Json在Unity中还是挺常用的一种数据格式的。那么,在Unity开发中哪些地方会用到Json呢?我相信没有太多编程经验的人肯定对这个问题比较感兴趣。在Unity中,有三种情况下会用到Json:
- 跟服务器进行数据交互
- 配置文件
- 跟Android/iOS数据交互
目前这三种情况在我们项目中都用到了,搞明白了Json怎么用,这些都很简单,在这里就不赘述了,直接进入正题。
二、Json怎么用?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
| using UnityEngine; using System;
public class JsonExample : MonoBehaviour { void Start() { #region 序列化 MyZone myZone = new MyZone(); myZone.blogUrl = "https://davidsheh.github.io/"; myZone.blogName = "Sheh伟伟的个人博客";
Blog blog = new Blog(); blog.url = "http://davidsheh.github.io/post/快速上手Unity原生Json库/"; blog.name = "快速上手Unity原生Json库"; blog.time = DateTime.Now.ToString("yyyy-MM-dd"); myZone.blog = blog;
string json = JsonUtility.ToJson(myZone); Debug.Log(json); #endregion
#region 反序列化 string blogStr = Resources.Load<TextAsset>("MyZone").text; myZone = JsonUtility.FromJson<MyZone>(blogStr); Debug.Log(myZone.ToString()); #endregion } }
[Serializable] public class MyZone { public string blogUrl; public string blogName; public Blog blog;
public override string ToString() { return string.Format("blogUrl:{0}, blogName:{1}, blog:{2}", blogUrl, blogName, blog.ToString()); } }
[Serializable] public class Blog { public string name; public string url; public string time;
public override string ToString() { return string.Format("<name:{0}, url:{1}, time:{2}>", name, url, time); } }
|
Json文件
1 2 3 4 5 6 7 8 9 10
| { "blogUrl": "https://davidsheh.github.io/", "blogName": "Sheh伟伟的个人博客", "blog": { "name": "快速上手Unity原生Json库", "url": " http://davidsheh.github.io/post/快速上手Unity原生Json库/", "time": "2016-09-27" } }
|
三、性能怎么样?
More JSON Performance Benchmarks这篇文章里详细对比分析了JsonUtility、LitJson和Newtonsoft.Json三种方式的序列化和反序列化的性能。
总的来说,JsonUtility在综合表现上要略胜一筹。
四、注意事项
经过测试发现JsonUtility不支持序列化DateTime、Dictionary和Hashtable,其他类型暂时还没有测试,有兴趣的可以自行测试。
五、参考资料
Unity API
介绍 JSON
如果本文有错误之处还请帮忙指出。