現(xiàn)在新版的Unity(印象中是從5.3開始)已經(jīng)提供了原生的Json庫迁酸,以前一直使用LitJson姓赤,研究了一下Unity用的JsonUtility工具類的使用,發(fā)現(xiàn)使用還挺方便的,所以打算把項(xiàng)目中的Json庫換成Unity原生的。在Unity3D開發(fā)中Json有什么用呢刮吧?下面就來說說Json在Unity中的使用。
一掖蛤、Json有什么用杀捻?
Json在Unity中還是挺常用的一種數(shù)據(jù)格式的。那么蚓庭,在Unity開發(fā)中哪些地方會用到Json呢致讥?我相信沒有太多編程經(jīng)驗(yàn)的人肯定對這個問題比較感興趣。在Unity中器赞,有三種情況下會用到Json:
- 跟服務(wù)器進(jìn)行數(shù)據(jù)交互
- 配置文件
- 跟Android/iOS數(shù)據(jù)交互
目前這三種情況在我們項(xiàng)目中都用到了垢袱,搞明白了Json怎么用,這些都很簡單港柜,在這里就不贅述了请契,直接進(jìn)入正題。
二夏醉、Json怎么用爽锥?
using UnityEngine;
using System;
public class JsonExample : MonoBehaviour
{
void Start()
{
#region 序列化
MyZone myZone = new MyZone();
myZone.blogUrl = "http://www.reibang.com/users/fd3eec0ab0f2/latest_articles";
myZone.blogName = "Sheh偉偉的博客";
Blog blog = new Blog();
blog.url = "http://www.reibang.com/p/4243b99a5b84";
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
{
/// <summary>
/// 博客主頁地址
/// </summary>
public string blogUrl;
/// <summary>
/// 博客名
/// </summary>
public string blogName;
/// <summary>
/// 本篇博客
/// </summary>
public Blog blog;
public override string ToString()
{
return string.Format("blogUrl:{0}, blogName:{1}, blog:{2}", blogUrl, blogName, blog.ToString());
}
}
[Serializable]
public class Blog
{
/// <summary>
/// 文章名稱
/// </summary>
public string name;
/// <summary>
/// 本篇博客鏈接
/// </summary>
public string url;
/// <summary>
/// 博客發(fā)表時間
/// </summary>
public string time;
public override string ToString()
{
return string.Format("<name:{0}, url:{1}, time:{2}>", name, url, time);
}
}
Json文件
{
"blogUrl": "http://www.reibang.com/users/fd3eec0ab0f2/latest_articles",
"blogName": "Sheh偉偉的博客",
"blog":
{
"name": "快速上手Unity原生Json庫",
"url": "http://www.reibang.com/p/4243b99a5b84",
"time": "2016-09-27"
}
}
三、性能怎么樣畔柔?
More JSON Performance Benchmarks這篇文章里詳細(xì)對比分析了JsonUtility救恨、LitJson和Newtonsoft.Json三種方式的序列化和反序列化的性能。
總的來說释树,JsonUtility在綜合表現(xiàn)上要略勝一籌。
四擎淤、注意事項(xiàng)
經(jīng)過測試發(fā)現(xiàn)JsonUtility不支持序列化DateTime奢啥、Dictionary和Hashtable,其他類型暫時還沒有測試嘴拢,有興趣的可以自行測試桩盲。
五、參考資料
如果本文有錯誤之處還請幫忙指出席吴。
本文作者: Sheh偉偉
本文鏈接: http://davidsheh.github.io/2016/10/12/快速上手Unity原生Json庫/
版權(quán)聲明: 本博客所有文章除特別聲明外赌结,均采用 CC BY-NC-SA 3.0 許可協(xié)議。轉(zhuǎn)載請注明出處孝冒!