Unity使用JsonFx进行JSON (反)序列
来源:互联网 发布:java实现排序算法 编辑:程序博客网 时间:2024/06/10 23:17
0. 背景
Unity作为客户端要与服务端通信,最为简单通信协议就是使用Json格式。本文简单讲述Unity使用JsonFx进行Json(反)序列。
序列和反序列是一个互为逆反的过程。反序列化可以帮助我们将已从文本中读取的一个字符串(确切是符合Json的字符串)解析成一种类型的数据实例,并且加载到内存中,直到我们摧毁它或停止应用程序。一旦我们在 unity 编辑器 (或关闭我们build生成中的窗口)关闭播放play模式,该数据就丢失了。而序列化是为了将其存储到文件系统中,不仅我们可以脱机编辑,而且当我们再次加载它,可以查看更改反映在我们的应用程序。
1. JsonFx
JsonFx是一个JSON (反)序列的插件,点此下载
2. 创建容器
容器其实是你想通过json字符串解析出来的类,他包含了若干个字段数据,例如Sandwich类
using System.Collections;using System.Collections.Generic;[System.Serializable]public class Sandwich{ public string name; public string bread; public float price; public List<string> ingredients = new List<string>();}
在Sanwich.cs中,共有name, bread, price, ingredients等字段,只是注意字段都是public的,这一点很重要! 此外,[System.Serializable] 能为我们做两件事: 它允许 JsonFx 要序列化的字段,并y的inspector面板上,将这些字段。
那应该怎么样的json字符串才能解析出来呢?请看下一章节。
3. (反)序列数据
反序列json字符串其实也非常简单,只需要遵循以下规则:
- json字符串的key要与类的字段名(key)要一致;
- json字符串的value要与类的字段名申明的类型一致;
例如,上述的Sanwich类的一个可行的反序列json字符串为:
string sandwich_json = "{\"name\":\"haqi\", \"bread\":\"tudousi\", \"price\":1.45, \"ingredients\":[\"sala\",\"beef\",\"cheese\",\"whatever\"]}";
4. 举个栗子
栗子即是上述Sandwich由反序列,然后序列化,最后保存的完整代码:
using UnityEngine;using System.Collections;using System.Collections.Generic;using System;using JsonFx.Json;using System.IO;// Sanwich类[System.Serializable]public class Sandwich{ public string name; public string bread; public float price; public List<string> ingredients = new List<string>();}public class Test : MonoBehaviour { void Start(){ //准备反序列化json字符串 string sandwich_json = "{\"name\":\"haqi\", \"bread\":\"tudousi\", \"price\":1.45, \"ingredients\":[\"sala\",\"beef\",\"cheese\",\"whatever\"]}"; // 反序列化,下个函数 Sandwich sw = Deserialize (sandwich_json); // 修改属性 sw.bread = "this_bread_is_changed"; // 序列化并且保存,下下个函数 SerializeAndSave (sw); } // 反序列化 Sandwich Deserialize(string sw_json){ // 使用JsonFx反序列功能 Sandwich sw = JsonReader.Deserialize<Sandwich> (sw_json); Debug.Log ("name:" + sw.name); Debug.Log ("bread:" + sw.bread); Debug.Log ("price:" + sw.price.ToString()); Debug.Log ("first ingredients:" + sw.ingredients[0]); return sw; } void SerializeAndSave(Sandwich sw) { // 使用JsonFx序列化功能 string data = JsonWriter.Serialize(sw); //持久化 var streamWriter = new StreamWriter(Path.Combine(Application.persistentDataPath, "serialize_sandwich.json")); streamWriter.Write(data); streamWriter.Close(); }}
最后修改了Sandwich实例,并且持久化到“serialize_sandwich.json”内容为:
{"name":"haqi","bread":"this_bread_is_changed","price":1.45,"ingredients":["sala","beef","cheese","whatever"]}
同时也欢迎大家移步我的github下载代码。
- Unity使用JsonFx进行JSON (反)序列
- Unity使用JsonFX插件进行序列化
- Unity 使用JsonFx解析本地json数据
- Unity利用JsonFX解析Json格式文本
- 【json】JsonFX
- JsonFX Unity3D 如何使用JsonFX
- 使用JavaScriptSerializer进行JSON序列化
- 使用JavaScriptSerializer进行JSON序列化
- Unity JSON 序列化
- mvc 使用Newtonsoft.Json进行序列化json数据
- Unity 中使用 ScriptableObject 对数据进行序列化
- .NET 3.5: 使用DataContractJsonSerializer进行JSON 序列化
- json - 使用jackson进行序列化/反序列化
- 使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错
- unity使用json
- 最好用的 unity3d Json数据传输,插件JsonFx !!
- 最好用的 unity3d Json数据传输,插件JsonFx !!
- 使用unity 5.3版本以上 自带Json解析器与后台进行登录验证。
- RxJava 详解
- S3C2440之定时器
- 五谷杂陈
- 初学者常见错误,android的多线程更新UI
- define与typdef 定义
- Unity使用JsonFx进行JSON (反)序列
- memcache安全配置
- HDOJ 2072的五种做法 C strtok 字典树 map容器 set容器
- 搜索1006
- FZU 2150 Fire Game
- S3C2440之PWM
- 易语言学习第九课
- [UIApplication sharedApplication].netwrokActivityIndicator = YES&NO
- ARM中的程序状态寄存器(CPSR)