Untiy Json和Xml的序列化和反序列化

Json的序列化和反序列化

1.定义数据类

[Serializable]
public class ZoomPoint
{// 点名称, 将作为Key被字典存储public string name;// 轴心X坐标public Vector2 pivot = Vector2.one / 2;// 放大倍率,小于1是为缩小倍率,小于0是取绝对值,不允许原点对称缩放,需要保证计算轴心逻辑正确// 默认设为1.5f 放大倍率public float zoomMagnification = 5f;// 改变的需要的时间,默认设为1fpublic float time = 1.0f;public override string ToString(){return $"name = {this.name}, pivot = ({pivot.ToString()}), zoomMagnification = {this.zoomMagnification}, time = {this.time}";}
}

2. 定义Json存储类

// 数据存储接受类
[Serializable]
public class Data{// public ZoomPoint[] zoomPoints;// public Dictionary<string, ZoomPoint> zoomPoints;public List<ZoomPoint> zoomPoints;
}

3.序列化

// 写入数据
public void WriteDataTest(){Data data = new(){zoomPoints = new List<ZoomPoint>()};ZoomPoint point1 = new ZoomPoint{name = "1",pivot = new Vector2(0.75f,0.75f)};ZoomPoint point2 = new ZoomPoint{name = "2",pivot = new Vector2(0.5f,0.5f)};data.zoomPoints[0] = point1;data.zoomPoints[1] = point2;string js = JsonUtility.ToJson(data);// 获取项目路径string fileUrl;if(filePath == ""){fileUrl = Application.streamingAssetsPath + jsonFileName;}else{fileUrl = filePath;}using(StreamWriter sw  = new StreamWriter(fileUrl)){   sw.WriteLine(js); //保存数据sw.Close(); sw.Dispose();}
} 

4.反序列化

 public Data ReadData(){// 获取文件路径string fileUrl;if(filePath == ""){fileUrl = Application.streamingAssetsPath + jsonFileName;}else{fileUrl = filePath;}//读取文件string readDate;using (StreamReader sr = File.OpenText(fileUrl)){readDate = sr.ReadLine();sr.Close();}Data data = JsonUtility.FromJson<Data>(readDate);// 分配内存if(data == null ){data = new Data() {zoomPoints = new List<ZoomPoint>()};return data;}// 数据保存到字典里foreach(ZoomPoint zp  in data.zoomPoints){dict.TryAdd(zp.name, zp);}return data;}

数据存储效果:

请添加图片描述


Ps: Unity C# Json 序列化换行

在ToJson中使用两个参数,第二个参数PrettyPrint 输入True
private void JsonText() {Node node = new Node() {name = "Node_01",pos = new(0, 0)};string filePath = Application.streamingAssetsPath + "/Json_01.json";string str = JsonUtility.ToJson(node, true);using (StreamWriter sw = new StreamWriter(filePath)) {sw.WriteLine(str); // 保存数据sw.Close(); // 关闭文档sw.Dispose();}Debug.Log(str);Grid grid = new() {nodes = new List<Node>()};Node node1 = new Node() {name = "Node_01",pos = new Vector2(0, 0)};Node node2 = new Node() {name = "Node_02",pos = new Vector2(0,1)};grid.nodes.Add(node1);grid.nodes.Add(node2);string filePath_01 = Application.streamingAssetsPath + "/Json_02.json";string str_01 = JsonUtility.ToJson(grid, true);using (StreamWriter sw = new StreamWriter(filePath_01)) {sw.WriteLine(str_01); // 保存数据sw.Close(); // 关闭文档sw.Dispose();}Debug.Log("数据序列化完成");
}[Serializable]
public class Node {public string name;public Vector2 pos;
}[Serializable]
public class Grid {public List<Node> nodes;
}

效果:

请添加图片描述

请添加图片描述


Xml的序列化和反序列化

1.定义数据类

public class XmlText {public string name;public string value;public List<int> list;public override string ToString() {return $"name = {name}, value = {value}, list = {list}";}
}

2.序列化

public void Init() {test = new XmlText() {name = "Xml测试",value = "value",list = new List<int>()};test.list.Add(1);test.list.Add(3);test.list.Add(100);}
 // 序列化Xml
public void XmlSerialize() {// 定义流文件FileStream fileStream = new FileStream(Application.streamingAssetsPath + "/text.xml",FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);// 定义写入流StreamWriter sw = new StreamWriter(fileStream, System.Text.Encoding.UTF8);// 位于System.Xml.Serialization 中的Xml序列化XmlSerializer xml = new XmlSerializer(test.GetType());// 将类序列化写入流中xml.Serialize(sw, test);// 关闭流sw.Close();fileStream.Close();
}

3.反序列化

public XmlText Deserialize() {// 流文件FileStream fs = new FileStream(Application.streamingAssetsPath + "/text.xml", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);// 定义序列化类XmlSerializer xml = new XmlSerializer(typeof(XmlText));// 反向序列化XmlText result = (XmlText)xml.Deserialize(fs);fs.Close();return result;}

结果:

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/31536.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

空降流量危机?QQ音乐升级架构应对高并发

# 关注并星标腾讯云开发者 # 每周3 | 谈谈我在腾讯的架构设计经验 # 第2期 | 赵威&#xff1a;QQ音乐评论系统如何实现高可用&#xff1f; QQ 音乐自诞生以来&#xff0c;已有多个版本的评论业务系统。最新版本是19年再次全新迭代&#xff0c;基于 tlist 存储&#xff0c;按照发…

外贸路上那些哭笑不得的事情

前几天一个老顾客在软件上联系&#xff0c;说自己上次的订货体验很满意&#xff0c;货物的质量很好&#xff0c;而且服务和回复也很及时&#xff0c; 比起他之前的供货商要好很多&#xff0c;他之前的供货商虽然货物的质量也很好&#xff0c;但是每次询问问题都是要等好久才给…

Fabric系列 - 知识点整理

知识点 源码编译 主机编译 容器编译 手动部署(docker-compose) 单peer 多peer 中途加peer 多主机多peer 链码 语法, 接口 (go版) 命令行调用 ca server 在DApp中使用SDK调用 (js版) 部署的几个阶段 部署1排序和1节点, 1组织1通道 光部署能Dapp 带ca server (每个组织一个)…

【1572. 矩阵对角线元素的和】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给你一个正方形矩阵 mat&#xff0c;请你返回矩阵对角线元素的和。 请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和。 示例 1&#xff1a; 输入&#xff1a;mat [[1,2,3]…

【ArcGIS Pro二次开发】(59):Editing(编辑)模块

ArcGIS Pro SDK中的"Editing"&#xff08;编辑&#xff09;模块提供了一系列API和工具&#xff0c;允许开发人员在ArcGIS Pro中实现各种地图数据编辑操作&#xff0c;从简单的要素绘制到复杂的数据集编辑。 下面列举一些常用编辑工具的实现方法。 1、获取所选要素的…

Typecho建站:腾讯云轻量应用服务器搭建网站博客方法

腾讯云轻量应用服务器自带Typecho应用模板镜像&#xff0c;腾讯云提供的Typecho模板镜像是基于CentOS 7.6 64位操作系统&#xff0c;并已预置Nginx、PHP、MariaDB软件程序&#xff0c;使用Typecho应用模板可以快速搭建博客、企业官网、电商及论坛等各类网站。腾讯云服务器网分享…

【腾讯云Cloud Studio实战训练营】使用React快速构建点餐H5

文章目录 前言一、Cloud Studio是什么二、Cloud Studio特点三、Cloud Studio使用1.访问官网2.账号注册3.模板选择4.模板初始化5.H5开发安装 antd-mobile安装 Less安装 normalize上传项目需要的素材替换App.js主文件项目启动、展示 6.发布仓库 总结 前言 随着云计算产业的发展&…

uniapp 开发 APP 使用 web-view 引入H5 app与 h5 页面通信

uniapp 可以同时兼容 APP 和 H5&#xff0c;但有时候有些功能在 APP 中实现不了而在 H5 中可以实现&#xff0c;就可以采用 web-view 的方式在 APP 模式下显示 H5 页面。但是 APP 和 H5 储存的参数是不能共享的&#xff0c;例如token&#xff0c;就涉及到 APP 与 H5 之间的参数…

调整奇数偶数顺序

调整数组使奇数全部都位于偶数前面。 题目&#xff1a; 输入一个整数数组&#xff0c;实现一个函数&#xff0c;来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分&#xff0c;所有偶数位于数组的后半部分。 思路&#xff1a; 1. 给定两个下标left和right&#…

勘探开发人工智能技术:机器学习(5)

0 提纲 6.1 矩阵分解 6.2 全连接 BP 神经网络 6.3 卷积神经网络 6.4 LSTM 6.5 Transformer 6.6 U-Net 1 矩阵分解 把稀疏矩阵分解成两个小矩阵的乘积, 恢复后的矩阵用于预测. 1.1 基本概念 矩阵分解是使用数学应对机器学习问题的一类典型而巧妙的方法. 矩阵分解是把将一个…

Springboot所有的依赖

<properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><!-- 声明springboot的版本号 -->…

【行为型设计模式】C#设计模式之策略模式

题目&#xff1a;假设你正在开发一个手机应用程序&#xff0c;该应用程序包含一个计算器功能。用户可以根据自己的需求选择不同的计算策略进行计算&#xff0c;例如加法、减法、乘法或除法。请使用策略模式设计该计算器功能&#xff0c;使得用户可以根据自己的选择进行相应的计…

MongoDB 分片集群

在了解分片集群之前&#xff0c;务必要先了解复制集技术&#xff01; 1.1 MongoDB复制集简介 一组Mongodb复制集&#xff0c;就是一组mongod进程&#xff0c;这些进程维护同一个数据集合。复制集提供了数据冗余和高等级的可靠性&#xff0c;这是生产部署的基础。 1.1.1 复制集…

3D Web轻量化引擎HOOPS Communicator如何实现对BIM桌面端的支持?

HOOPS Communicator是一款简单而强大的工业级高性能3D Web轻量化渲染开发包&#xff0c;其主要应用于Web领域&#xff0c;主要加载其专有的SCS、SC、SCZ格式文件&#xff1b;HOOPS还拥有另一个桌面端开发包HOOPS Visualize&#xff0c;主要加载HSF、HMF轻量化格式文件。两者虽然…

基于 eclipse-temurin 构建国内时区,地区,语言的docker镜像

基于 eclipse-temurin 构建国内时区&#xff0c;地区&#xff0c;语言的镜像 使用场景自定Dockerfile构建自己的基础镜像构建本地镜像推送远程仓库 使用场景 在给应用构建自定义镜像时&#xff0c;往往需要在每次构建时去调整时区&#xff0c;地区这些东西&#xff1b;每次构建…

那些年的Xposed开发经验记录

把之前写的Xposed相关文章合并到一块&#xff0c;方便查阅 目录 多进程App的Hook问题XposedHelper中的静态变量demo的AndroidManifest.xml的测试核心代码结论限制handleLoadPackage被单个进程多次执行的问题 多dex Hook问题为应用增加权限利用Xposed删除权限参考 Hook框架集锦…

Java基础入门篇——IDEA开发第一个入门程序(五)

目录 一、IDEA层级结构分类 二、IDEA层级结构介绍 三、IDEA层级关系 四、创建IDEA中的第一个代码 一、IDEA层级结构分类 IntelliJ IDEA的项目结构主要分为以下几个层级&#xff1a; Project&#xff1a; 项目Module: 模块Package: 包Class&#xff1a; 类 一个项目里面…

hive-3.1.3 部署 ubuntu20

准备 安装hadoop 安装hive derby # 上传 scp -P 22 -r D:\00garbage\big_data\hive\apache-hive-3.1.3-bin.tar.gz mybigdata192.168.66.20:/home/mybigdata/ tar -zxvf apache-hive-3.1.3-bin.tar.gz mv apache-hive-3.1.3 hive # 环境变量 vim ~/.bashrc # 初始化元数据库…

力扣:58. 最后一个单词的长度(Python3)

题目&#xff1a; 给你一个字符串 s&#xff0c;由若干单词组成&#xff0c;单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#x…

Android图形-合成与显示-概论

目录 引言 概念与理解 SurfaceFlinger Surface HWC Fence&#xff1a; Gralloc&#xff1a; DisplayDevice 引言 Activity是Android的主要UI相关组件。通过View的相关类和接口实现&#xff0c;在WMS的管理下&#xff0c;进行窗口和控件的测量&#xff0c;布局和绘制&am…