一、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接口的使用相关推荐

  1. Unity数据持久化——Json

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

  2. Unity数据持久化-Json

    文章目录 JSON概念: JSON结构: JSON优势: 与JavaScript的关系: Unity方法: 使用JsonUtility Json存储 Json加载: 注意事项: 完整代码参考: 使用L ...

  3. 【Unity数据持久化_Json】(二)Excel转Json

    一.在Excel表中配置游戏数据 创建一个Excel文件,填写游戏数据 二.将Excel表中配置的数据转为Json配置 1.网页搜索Excel转Json 如:https://www.bejson.co ...

  4. 《连载 | 物联网框架ServerSuperIO教程》- 15.数据持久化接口的使用。附:3.2发布与版本更新说明。...

    1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...

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

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

  6. 【iOS数据持久化】数据库(SQLite.swift)和FMDB

    数据持久化之SQLite数据库(SQLite.swift使用) 一.     简介 SQLite是一款轻型的嵌入式数据库,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就足够了.它的处理速 ...

  7. 数据持久化 技术比较

      [数据存储]coredata.sqlite.fmdb和sqlitepersistentobject 管理提醒: 本帖被 angellixf 从 OS X开发讨论区 移动到本区(2014-02-12 ...

  8. jpa 不自动建表_如何来实现SpringBoot应用的JPA数据持久化和热插拔

    数据持久化 JPA ( Java Persistence API)是用于管理Java EE和Java SE环境中的持久化,以及对象/关系映射的Java API. JPA最新规范为"JSR 3 ...

  9. scrapy框架对接seleniumpipeline数据持久化

    文章目录 1.**scrapy对接selenium** 2.pipeline数据持久化 1.scrapy对接selenium 动态数据加载: 1.ajax: ①url接口存在规律, 可以自行构建url ...

最新文章

  1. 同一数据库如果处理多个完全不同的业务?
  2. python 结束子线程并保证工作完成_python3中在线程中结束工作进程的方法
  3. [问题已处理]-[jenkins]-Jenkins 反向代理有误
  4. java tree json,基于jstree使用JSON数据组装成树
  5. 使用Apache POI插入内容
  6. Linux基本命令 (一)
  7. 在php中源代码怎么查看,查看PHP Closure的源代码
  8. 网络爬虫--24.【selenium实战】实现拉勾网爬虫之--分析接口获取数据
  9. java集合系列_Java集合系列01-Java集合概述
  10. 云服务器搭建虚拟主机教程,云服务器搭建虚拟主机教程
  11. 简单完整的Python小爬虫教程
  12. 数据库入门(SQL SEVER)之SQL语句删除单行数据,所有行数据,表和数据库
  13. Python 列表元素的排序
  14. 大学物理实验(二)气体比热容比的测定
  15. 微信小程序——云开发的安全规则
  16. QT自制秒表计时器、可获取电脑时间
  17. X2000 halley5开发板,buildroot编译image
  18. 基于python实现高分二号遥感影像水体提取与水质反演(黑臭水体与水体富营养化)
  19. 简单分布式锁实现(拍黄片)
  20. 使用pandas把某一列的字符值转换为数字

热门文章

  1. 【Maven】简介信息
  2. 详细讲解 —— 网络编程套接字(Java EE初阶)
  3. Android , 打开系统播放器
  4. Unity Cinemachine之第三人称摄像机CinemachineFreeLook属性详解
  5. 2013款Mac Pro“神秘”主机详解
  6. linux无法添加网络连接到服务器地址,ubuntu9.1服务器版局域网IP设置 网络无法连接(急)...
  7. hangman游戏c语言,英语游戏 猜词游戏hangman
  8. 链表中为何使用二级指针
  9. 青龙+WxPusher实现资产推送
  10. 解决git中upstream丢失问题Your branch is based on 'origin/xxxx', but the upstream is gone.