Unity 中XML序列化和反序列化
来源:互联网 发布:获取访客手机号码源码 编辑:程序博客网 时间:2024/06/05 16:35
**序列化名词解释:序列化是将对象状态转换为可保持或传输的格式的过程。
与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。这就是序列化的意义所在。**
XML序列化的实质:
序列化是不一个对象持久化到磁盘的一个过程,应用程序的一部分,甚至另一个程序都可以反序列化对象,是它的状态与序列化之前相同,,用到的名空间System.Xml.Serialization名称空间,反序列化可以理解为把该过程到过来再来一遍,,
XML序列化过程的描述:
System.Xml.Serialization命名空间中最重要的类使XmlSerializer,,,要序列化对象,首先要有被序列化的对象(比如:人物信息),,首先有一个指定的流文件(FileInfo),而后创建传入路径下的文件, 并且 实例化一个流/写入器对象(StreamWriter)作为接收,,,最后需要实例化一个XmlSerializer对象,指定要序列化的对象类型,,在XmlSeralization上调用Serializer()方法,,,记得要关闭流,,
给它传递流/写入器对象和要序列化的对象被序列化的数据可以为基本数据类型的数据,字段,数组,以及XmlElement和XmlAttribute对象格式的内嵌XML,,,
XML反序列化的过程描述:
从XML文档中反序列化对象,应执行上述逆向过程,创建一个流/读取器对象和一个XmlSerializer对象,然后给DeSerializer()方法传递该流/读取对象,这个方法返回序列化对象,尽管它需要强制转换为正确的类型,,
实际代码演示:序列化一个游戏物体(例如玩家,怪物,NPC等)对象的实例,可以将它的数据(例如:位置,名字,等级,血量,经验)序列化到XML中,,,
将以下挂载到cube上,程序运行,移动cube,并点击序列化和反序列化按钮,,,
using System;using System.IO;using System.Xml.Serialization;using UnityEngine;/// <summary>/// 注意一定是公开的 需要序列化的玩家信息/// </summary>public class Player{ public struct Pos { public float x, y, z; } public Pos pos; public string name; public float Exp; public int Level; public int HP;}public class SerializerDemo : MonoBehaviour { private string path; //存储XML的路径 public Player p1; //获取玩家引用 // Use this for initialization void Start () { path = Application.dataPath + "/Demo.xml"; //实例化玩家,并初始化数据 p1 = new Player(); p1.name = "Czhenya"; p1.Exp = 0; p1.Level = 0; p1.HP = 0; } void OnGUI () { if (GUILayout.Button("CreateXML")) { p1.pos.x = this.transform.position.x; p1.pos.y = this.transform.position.y; p1.pos.z = this.transform.position.z; SerCreate(); } if (GUILayout.Button("DeXML")) { DeSerCreate(); } } /// <summary> /// 序列化方法 /// </summary> private void SerCreate() { //指定流文件 (创建XML的目录) FileInfo info = new FileInfo(path); //Debug.Log(info); StreamWriter sw; //流写入器对象,, if (!info.Exists) //判断路径是否存在 { //不存在创建 sw = info.CreateText(); } else { //存在就删除,再创建 info.Delete(); sw = info.CreateText(); } //实例化对象,并 指定序列化的类型 XmlSerializer ser = new XmlSerializer(typeof(Player)); //序列化方法,,(流写入器,玩家) ser.Serialize(sw,p1); sw.Close(); //关闭流 } /// <summary> /// 反序列化方法 /// </summary> private void DeSerCreate() { //指定流文件 FileStream fs = new FileStream(path,FileMode.Open); XmlSerializer xmlSer = new XmlSerializer(typeof(Player)); Player readp1 =(Player) xmlSer.Deserialize(fs); Debug.Log(readp1.name); //得到的玩家信息 //将反序列化的信息赋值给玩家 this.transform.position = new Vector3(readp1.pos.x, readp1.pos.y, readp1.pos.z); } }}
- Unity 中XML序列化和反序列化
- Unity XML的序列化和反序列化
- unity序列化和反序列XML,并添加属性
- C#中XML序列化和反序列化初探
- C# 中XML的序列化和反序列化
- XML序列化和反序列化
- XML序列化和反序列化
- Xml序列化和反序列化
- XML序列化和反序列化
- xml序列化和反序列化
- XML序列化和反序列化
- XML序列化和反序列化
- Xml序列化和反序列化
- unity xml序列化与反序列化 多平台
- unity Dictionary序列化和反序列化及XML本地数据存储
- Unity中JSON序列化与反序列化
- SimpleJSON在unity端序列化和反序列化
- Unity 数据 序列化和反序列化 通用方法
- HDU1085 多重背包
- 管理员
- Docker小技巧(一)——阿里云CentOS7加速
- ZED stereo安装及使用相关
- 用户表单
- Unity 中XML序列化和反序列化
- SpringBoot学习之整合SSM+pagehelper+druid+单元测试
- (二)静态链表
- 十一个行为型模式5:中介者模式-Mediator Pattern【学习难度:★★★☆☆,使用频率:★★☆☆☆】
- codewars解题笔记 —— 数组的判断
- Java笔记--09
- 同是毕业两年
- 多线程简单实例
- [BZOJ1097][POI2007]旅游景点atr(状压dp)