快速上手Unity原生Json库

现在新版的Unity(印象中是从5.3开始)已经提供了原生的Json库,以前一直使用LitJson,研究了一下Unity用的JsonUtility工具类的使用,发现使用还挺方便的,所以打算把项目中的Json库换成Unity原生的。在Unity3D开发中Json有什么用呢?下面就来说说Json在Unity中的使用。

一、Json有什么用?


Json在Unity中还是挺常用的一种数据格式的。那么,在Unity开发中哪些地方会用到Json呢?我相信没有太多编程经验的人肯定对这个问题比较感兴趣。在Unity中,有三种情况下会用到Json:

  1. 跟服务器进行数据交互
  2. 配置文件
  3. 跟Android/iOS数据交互
    目前这三种情况在我们项目中都用到了,搞明白了Json怎么用,这些都很简单,在这里就不赘述了,直接进入正题。

二、Json怎么用?


using UnityEngine;
using System;

public class JsonExample : MonoBehaviour
{
    void Start()
    {
        #region 序列化
        MyZone myZone = new MyZone();
        myZone.blogUrl = "http://www.jianshu.com/users/fd3eec0ab0f2/latest_articles";
        myZone.blogName = "Sheh伟伟的博客";

        Blog blog = new Blog();
        blog.url = "http://www.jianshu.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("MyZone").text;
        myZone = JsonUtility.FromJson(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, url, time);
    }
}

Json文件

{
  "blogUrl": "http://www.jianshu.com/users/fd3eec0ab0f2/latest_articles",
  "blogName": "Sheh伟伟的博客",
  "blog": 
  {
    "name": "快速上手Unity原生Json库",
    "url": "http://www.jianshu.com/p/4243b99a5b84",
    "time": "2016-09-27"
  }
}

三、性能怎么样?


More JSON Performance Benchmarks这篇文章里详细对比分析了JsonUtility、LitJson和Newtonsoft.Json三种方式的序列化和反序列化的性能。
总的来说,JsonUtility在综合表现上要略胜一筹。

四、注意事项


经过测试发现JsonUtility不支持序列化DateTime、Dictionary和Hashtable,其他类型暂时还没有测试,有兴趣的可以自行测试。

五、参考资料


Unity API
介绍 JSON

如果本文有错误之处还请帮忙指出。


本文作者: Sheh伟伟
本文链接: http://davidsheh.github.io/2016/10/12/快速上手Unity原生Json库/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!

你可能感兴趣的:(快速上手Unity原生Json库)