Unity使用JsonFx进行JSON (反)序列
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\":\"tudo
usi\", \"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 (反)序列相关推荐
- 【JQuery】将Json Object序列化成URL的QueryString
前言 JQuery 3.5.1 (仅表示下面的代码使用这个版本测试过) 什么是 QueryString 包含 query string 的URL看起来像这样: http://server/path/p ...
- Newtonsoft.Json.dll序列化为json,null值自动过滤
Newtonsoft.Json.dll序列化为json,null值自动过滤 原文:Newtonsoft.Json.dll序列化为json,null值自动过滤 var jSetting = new Js ...
- 在unity中添加Newtonsoft.Json
在Packages->packages-lock.json中修改com.unity.collab-proxy为 "com.unity.collab-proxy": { ...
- unity创建与解析json
今天翻看了一下之前的博客,发现写了好几篇关于加载json的文章,今天正好有时间就把之前的几篇文章的内容总结一下,然后在添加一些新内容. 在unity里边可以用的加载json的插件有:JsonUtili ...
- Unity之数据持久化——Json
1.Json是什么 JavaScript对象简谱(JavaScript Object Notation) json是国际通用的一种轻量级的数据交换格式,主要在网络通讯中用于传输数据,或本地数据存储和读 ...
- 在unity中使用Newtonsoft.Json
由于unity(目前是用unity5.5)目前最高支持.net framework 版本是3.5,所以无法直接通过NuGet导入Newtonsoft.Json来使用. 可以访问GitHub下载相应的支 ...
- Unity——写入和读取Json信息的方法
首先在Unity的Assets目录下新建一个Plugins文件夹,引入LitJson.dll类库!!! 编写读写脚本时,还需要再导入命名空间 using LitJson 关于Litjson文件: 可以 ...
- unity 打包的exe进行反编译
首先找到打完的exe包 然后依次打开 xxxxx _Data>Managed找到Assembly-CSharp.dll这个文件 反编译工具 dnSpy 请出反编译的工具 dnSpy 然后将这个d ...
- 在Unity项目添加Newtonsoft.Json(Json.NET)错误及解决办法
通过VS的包管理器添加了Newtonsoft.Json到项目里面. 虽然在VS里面可以正确引用命名空间 Newtonsoft.Json, 但是Unity报错: the type or namespac ...
最新文章
- C#forUnity快速入门(连载2)-C#语言入门
- Struts2 学习笔记 — 第一个struts2项目
- 微型计算机与维修自测,微机系统及维护第三章自测.doc
- oracle创建函数语句,Oracle 创建函数与存储过程语句积累
- 打印 Python 的一切 —— pprint beeprint
- JEPaas代码((列表,表单)确认入库按钮
- Linux系统有线网络抓包程序
- Atitit if else 选择决策流程ast对比 sql java 表达式类型 binaryExpression hase left and rit expr 目录 1.1. Sql	1
- R语言缺失值判断与处理mice包-3
- recycleview添加item点击事件--作业三
- [MAC 苹果电脑] [装双系统] “苹果电脑装Windows双系统”讲解
- vue-manage-system : Vue2 后台管理系统解决方案
- 注意啦,还没有支持64位系统的App开发者,务必在12月底前完成这件事
- 计算机网络英语作文150字,微信投票的英语,写一篇关于网络投票看法的英语作文150字左右...
- 14款超时尚的HTML5时钟动画
- 方根法公式_(完整word版)层次分析法中用方根法计算权重在Excel中的具体操作
- matlab2012a到期重新激活
- React Navigation 基本使用
- toad可以连接mysql吗_toad的连接数据库
- CAN 协议控制器和物理总线之间的接口芯片SIT1040T 高速 CAN 总线收发器
热门文章
- 百度地图hd版 android,百度地图hd版Android版
- Visual Studio 2019/2017 安装使用教程
- Unity3D-黑魂复刻学习-(2)新增1D控制tree,串接玩家控制模块
- JavaSE学习day3_01, 逻辑运算符号
- 欧冠比赛数据集(梅西不哭-离开巴萨也可能再创巅峰)
- Ubuntu关机与重启
- 关于MySQL : CREATE TABLE if not exists xxx/ALTER TABLE xxx ADD COLUMN IF NOT EXISTS xxx语法使用注意
- 日常英语---三、网页查找单词用什么
- 【MMU篇】初见MMU和TLB
- 火影几点服务器维护完,火影忍者ol3月10日维护更新内容正式版 3月10日更新限时积分商城开启...