【Unity数据持久化】Ixmllserializable接口的使用
一、Ixmllserializable是什么?
是C#中的XmlSerializer中提供了可拓展内容
可以让一些无法被序列化和反序列化的特殊类能被序列化(如Dictionary)
让特殊类继承Ixmllserializable接口,实现其中的方法即可
二、自定义类实践
实践前须知:
将演示对这个数据结构类进行序列化和反序列化
public class PlayerInfo
{public int lv; //等级public string name; //名字
}
直接上代码:
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Xml;
using System.Xml.Schema;
using System.Xml.Serialization;
using UnityEngine;
//准备一个自定义类,用来被序列化
// 继承IXmlSerializable接口,继承此接口后,将会使用我们自定义的序列化规则
public class PlayerInfo : IXmlSerializable
{public int lv;public string name;//实现继承IXmlSerializable接口中的三个方法/// <summary>/// 方法1/// </summary>/// <returns></returns>public XmlSchema GetSchema(){//直接返回空即可return null;}/// <summary>///方法2:该类被序列化时,会自动调用/// 自定义我们自己的序列化规则/// </summary>/// <param name="writer">根节点</param>public void WriteXml(XmlWriter writer){//reader代表的就是根节点(PlayerInfo)//如果要自定义序列化规则,一定会用到XmlWriter中的方法来进行序列化//1.写节点writer.WriteElementString("lv", this.lv.ToString());writer.WriteElementString("name", this.name.ToString());//2.写节点的子节点// WriteStartElement和WriteEndElement一定是配对出现的XmlSerializer s = new XmlSerializer(typeof(int));writer.WriteStartElement("lv");s.Serialize(writer, lv);writer.WriteEndElement();XmlSerializer s2 = new XmlSerializer(typeof(string));writer.WriteStartElement("name");s2.Serialize(writer, name);writer.WriteEndElement();//3.写属性// 参数1 属性名// 参数2 属性的值//writer.WriteAttributeString("lv", this.lv.ToString());//writer.WriteAttributeString("name", "义眼鼎针");}/// <summary>///方法3:该类被反序列化时,会自动调用/// 自定义我们自己的反序列化规则/// </summary>/// <param name="reader"></param>public void ReadXml(XmlReader reader){//reader代表的就是根节点(PlayerInfo)//1.读节点// 读节点方法一:一块一块读// 读节点的形式有些奇葩,是一块一块往下读// 可用以下代码对比xml文件中的节点来理解reader.Read();//这是读到了<lv>节点reader.Read();//这是读到了<lv>节点包裹的内容this.lv = int.Parse(reader.Value);//这是读到<lv>节点的包裹内容的值(12)reader.Read();//这是读到了</lv>reader.Read();//这是读到了<name>节点reader.Read();//这是读到了<name>节点包裹的内容this.name = reader.Value;//这是读到<name>节点的包裹内容的值(义眼鼎针)// 读节点方法二:循环配合类型判断while (reader.Read()){// 如果类型是Element(节点)if (reader.NodeType == XmlNodeType.Element){switch (reader.Name){// PlayerInfo中有两个节点case "lv":reader.Read();this.lv = int.Parse(reader.Value);break;case "name":reader.Read();this.name = reader.Value;break;}}}//2.读节点的子节点XmlSerializer s = new XmlSerializer(typeof(int));XmlSerializer s2 = new XmlSerializer(typeof(string));// 跳过根节点reader.Read();reader.ReadStartElement("lv");this.lv = (int)s.Deserialize(reader);reader.ReadEndElement();reader.ReadStartElement("name");this.name = s2.Deserialize(reader).ToString();reader.ReadEndElement();//3.读属性//this.lv = int.Parse(reader["lv"]);//this.name = reader["name"];}
}
public class Lesson3 : MonoBehaviour
{void Start(){PlayerInfo p = new PlayerInfo();p.lv = 12;p.name = "义眼鼎针";string path = Application.persistentDataPath + "/PlayerInfo.xml";//对这个对象将进行序列化using (StreamWriter writer = new StreamWriter(path)){//声明序列化“翻译器”XmlSerializer s = new XmlSerializer(typeof(PlayerInfo));//传入要写到哪里 和 写谁s.Serialize(writer, p);}//对这个对象将进行反序列化using (StreamReader reader = new StreamReader(path)){//声明反序列化“翻译器”XmlSerializer s = new XmlSerializer(typeof(PlayerInfo));PlayerInfo p2 = s.Deserialize(reader) as PlayerInfo;}}
}
【Unity数据持久化】Ixmllserializable接口的使用相关推荐
- Unity数据持久化——Json
1.Json是什么? 全称: JavaScript对象简谱((JavaScript Object Notation) Json是国际通用的一种轻量级的数据交换格式 主要在网络通讯中用于传输数据,或本地 ...
- Unity数据持久化-Json
文章目录 JSON概念: JSON结构: JSON优势: 与JavaScript的关系: Unity方法: 使用JsonUtility Json存储 Json加载: 注意事项: 完整代码参考: 使用L ...
- 【Unity数据持久化_Json】(二)Excel转Json
一.在Excel表中配置游戏数据 创建一个Excel文件,填写游戏数据 二.将Excel表中配置的数据转为Json配置 1.网页搜索Excel转Json 如:https://www.bejson.co ...
- 《连载 | 物联网框架ServerSuperIO教程》- 15.数据持久化接口的使用。附:3.2发布与版本更新说明。...
1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...
- Unity之数据持久化——Json
1.Json是什么 JavaScript对象简谱(JavaScript Object Notation) json是国际通用的一种轻量级的数据交换格式,主要在网络通讯中用于传输数据,或本地数据存储和读 ...
- 【iOS数据持久化】数据库(SQLite.swift)和FMDB
数据持久化之SQLite数据库(SQLite.swift使用) 一. 简介 SQLite是一款轻型的嵌入式数据库,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就足够了.它的处理速 ...
- 数据持久化 技术比较
[数据存储]coredata.sqlite.fmdb和sqlitepersistentobject 管理提醒: 本帖被 angellixf 从 OS X开发讨论区 移动到本区(2014-02-12 ...
- jpa 不自动建表_如何来实现SpringBoot应用的JPA数据持久化和热插拔
数据持久化 JPA ( Java Persistence API)是用于管理Java EE和Java SE环境中的持久化,以及对象/关系映射的Java API. JPA最新规范为"JSR 3 ...
- scrapy框架对接seleniumpipeline数据持久化
文章目录 1.**scrapy对接selenium** 2.pipeline数据持久化 1.scrapy对接selenium 动态数据加载: 1.ajax: ①url接口存在规律, 可以自行构建url ...
最新文章
- 同一数据库如果处理多个完全不同的业务?
- python 结束子线程并保证工作完成_python3中在线程中结束工作进程的方法
- [问题已处理]-[jenkins]-Jenkins 反向代理有误
- java tree json,基于jstree使用JSON数据组装成树
- 使用Apache POI插入内容
- Linux基本命令 (一)
- 在php中源代码怎么查看,查看PHP Closure的源代码
- 网络爬虫--24.【selenium实战】实现拉勾网爬虫之--分析接口获取数据
- java集合系列_Java集合系列01-Java集合概述
- 云服务器搭建虚拟主机教程,云服务器搭建虚拟主机教程
- 简单完整的Python小爬虫教程
- 数据库入门(SQL SEVER)之SQL语句删除单行数据,所有行数据,表和数据库
- Python 列表元素的排序
- 大学物理实验(二)气体比热容比的测定
- 微信小程序——云开发的安全规则
- QT自制秒表计时器、可获取电脑时间
- X2000 halley5开发板,buildroot编译image
- 基于python实现高分二号遥感影像水体提取与水质反演(黑臭水体与水体富营养化)
- 简单分布式锁实现(拍黄片)
- 使用pandas把某一列的字符值转换为数字
热门文章
- 【Maven】简介信息
- 详细讲解 —— 网络编程套接字(Java EE初阶)
- Android , 打开系统播放器
- Unity Cinemachine之第三人称摄像机CinemachineFreeLook属性详解
- 2013款Mac Pro“神秘”主机详解
- linux无法添加网络连接到服务器地址,ubuntu9.1服务器版局域网IP设置 网络无法连接(急)...
- hangman游戏c语言,英语游戏 猜词游戏hangman
- 链表中为何使用二级指针
- 青龙+WxPusher实现资产推送
- 解决git中upstream丢失问题Your branch is based on 'origin/xxxx', but the upstream is gone.