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字符串其实也非常简单,只需要遵循以下规则:

  1. json字符串的key要与类的字段名(key)要一致;
  2. 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 (反)序列相关推荐

  1. 【JQuery】将Json Object序列化成URL的QueryString

    前言 JQuery 3.5.1 (仅表示下面的代码使用这个版本测试过) 什么是 QueryString 包含 query string 的URL看起来像这样: http://server/path/p ...

  2. Newtonsoft.Json.dll序列化为json,null值自动过滤

    Newtonsoft.Json.dll序列化为json,null值自动过滤 原文:Newtonsoft.Json.dll序列化为json,null值自动过滤 var jSetting = new Js ...

  3. 在unity中添加Newtonsoft.Json

    在Packages->packages-lock.json中修改com.unity.collab-proxy为     "com.unity.collab-proxy": { ...

  4. unity创建与解析json

    今天翻看了一下之前的博客,发现写了好几篇关于加载json的文章,今天正好有时间就把之前的几篇文章的内容总结一下,然后在添加一些新内容. 在unity里边可以用的加载json的插件有:JsonUtili ...

  5. Unity之数据持久化——Json

    1.Json是什么 JavaScript对象简谱(JavaScript Object Notation) json是国际通用的一种轻量级的数据交换格式,主要在网络通讯中用于传输数据,或本地数据存储和读 ...

  6. 在unity中使用Newtonsoft.Json

    由于unity(目前是用unity5.5)目前最高支持.net framework 版本是3.5,所以无法直接通过NuGet导入Newtonsoft.Json来使用. 可以访问GitHub下载相应的支 ...

  7. Unity——写入和读取Json信息的方法

    首先在Unity的Assets目录下新建一个Plugins文件夹,引入LitJson.dll类库!!! 编写读写脚本时,还需要再导入命名空间 using LitJson 关于Litjson文件: 可以 ...

  8. unity 打包的exe进行反编译

    首先找到打完的exe包 然后依次打开 xxxxx _Data>Managed找到Assembly-CSharp.dll这个文件 反编译工具 dnSpy 请出反编译的工具 dnSpy 然后将这个d ...

  9. 在Unity项目添加Newtonsoft.Json(Json.NET)错误及解决办法

    通过VS的包管理器添加了Newtonsoft.Json到项目里面. 虽然在VS里面可以正确引用命名空间 Newtonsoft.Json, 但是Unity报错: the type or namespac ...

最新文章

  1. C#forUnity快速入门(连载2)-C#语言入门
  2. Struts2 学习笔记 — 第一个struts2项目
  3. 微型计算机与维修自测,微机系统及维护第三章自测.doc
  4. oracle创建函数语句,Oracle 创建函数与存储过程语句积累
  5. 打印 Python 的一切 —— pprint beeprint
  6. JEPaas代码((列表,表单)确认入库按钮
  7. Linux系统有线网络抓包程序
  8. Atitit if else 选择决策流程ast对比 sql java 表达式类型 binaryExpression hase left and rit expr 目录 1.1. Sql 1
  9. R语言缺失值判断与处理mice包-3
  10. recycleview添加item点击事件--作业三
  11. [MAC 苹果电脑] [装双系统] “苹果电脑装Windows双系统”讲解
  12. vue-manage-system : Vue2 后台管理系统解决方案
  13. 注意啦,还没有支持64位系统的App开发者,务必在12月底前完成这件事
  14. 计算机网络英语作文150字,微信投票的英语,写一篇关于网络投票看法的英语作文150字左右...
  15. 14款超时尚的HTML5时钟动画
  16. 方根法公式_(完整word版)层次分析法中用方根法计算权重在Excel中的具体操作
  17. matlab2012a到期重新激活
  18. React Navigation 基本使用
  19. toad可以连接mysql吗_toad的连接数据库
  20. CAN 协议控制器和物理总线之间的接口芯片SIT1040T 高速 CAN 总线收发器

热门文章

  1. 百度地图hd版 android,百度地图hd版Android版
  2. Visual Studio 2019/2017 安装使用教程
  3. Unity3D-黑魂复刻学习-(2)新增1D控制tree,串接玩家控制模块
  4. JavaSE学习day3_01, 逻辑运算符号
  5. 欧冠比赛数据集(梅西不哭-离开巴萨也可能再创巅峰)
  6. Ubuntu关机与重启
  7. 关于MySQL : CREATE TABLE if not exists xxx/ALTER TABLE xxx ADD COLUMN IF NOT EXISTS xxx语法使用注意
  8. 日常英语---三、网页查找单词用什么
  9. 【MMU篇】初见MMU和TLB
  10. 火影几点服务器维护完,火影忍者ol3月10日维护更新内容正式版 3月10日更新限时积分商城开启...