Unity3D学习之数据持久化——XML

文章目录

  • [1. 前言](#1. 前言)
  • [2. XML 基本语法](#2. XML 基本语法)
    • [2.1 固定语法(重要)](#2.1 固定语法(重要))
    • [2.2 注释](#2.2 注释)
    • [2.3 基本语法](#2.3 基本语法)
    • [2.4 基本规则](#2.4 基本规则)
    • [2.5 xml 属性](#2.5 xml 属性)
    • [2.6 验证语法错误](#2.6 验证语法错误)
    • 2.7 C#对象和XML的手动转换
  • 3. C#读取存储XML
    • [3.1 创建xml](#3.1 创建xml)
    • [3.2 C# 读取xml文件](# 读取xml文件)
      • [3.2.1 通过Resources文件进行读取](#3.2.1 通过Resources文件进行读取)
      • [3.2.2 通过xml文件进行加载](#3.2.2 通过xml文件进行加载)
    • [3.3 C# 存储xml文件](# 存储xml文件)
      • [3.3.1 存储在哪个文件夹](#3.3.1 存储在哪个文件夹)
      • [3.3.2 存储xml文件](#3.3.2 存储xml文件)
    • [3.4 C# 修改xml文件](# 修改xml文件)
  • [4 XML 序列化](#4 XML 序列化)
    • [4.1 什么是序列化和反序列化](#4.1 什么是序列化和反序列化)
    • [4.2 xml 序列化](#4.2 xml 序列化)
    • [4.3 自定义结点](#4.3 自定义结点)
  • [5 xml 反序列化](#5 xml 反序列化)
    • [5.1 判断文件是否存在](#5.1 判断文件是否存在)
    • [5.2 反序列化](#5.2 反序列化)
  • [6 IXmlSerializeable 接口(自定义xmlSerializeable类)](#6 IXmlSerializeable 接口(自定义xmlSerializeable类))
    • [6.1 继承 IXmlSerializable](#6.1 继承 IXmlSerializable)
    • [6.2 WriteXml函数](#6.2 WriteXml函数)
      • [6.2.1 存属性](#6.2.1 存属性)
      • [6.2.2 存结点](#6.2.2 存结点)
      • [6.2.3 写包裹结点](#6.2.3 写包裹结点)
    • [6.3 ReadXml函数](#6.3 ReadXml函数)
      • [6.3.1 读属性](#6.3.1 读属性)
      • [6.3.2 读结点](#6.3.2 读结点)
      • [6.3.3 读包裹节点](#6.3.3 读包裹节点)
    • [6.4 让dictionary支持序列化反序列化](#6.4 让dictionary支持序列化反序列化)
      • [6.4.1 序列化](#6.4.1 序列化)
      • [6.4.2 反序列化](#6.4.2 反序列化)
  • [7 xml数据管理类](#7 xml数据管理类)
    • [7.1 存储](#7.1 存储)
    • [7.2 读取](#7.2 读取)

1. 前言


最终达到的效果



2. XML 基本语法

2.1 固定语法(重要)

2.2 注释

2.3 基本语法

树形结构

2.4 基本规则

2.5 xml 属性

属性通过空格隔开 属性名 = 引导包裹的内容

这两个代表的东西是一样的

2.6 验证语法错误

可以在菜鸟上使用xml验证器
xml验证器

2.7 C#对象和XML的手动转换


3. C#读取存储XML

3.1 创建xml

在Resources文件夹创建一个xml文件

把文件再复制到streamingAsserts

3.2 C# 读取xml文件

3.2.1 通过Resources文件进行读取

3.2.2 通过xml文件进行加载

获取根节点

遍历同名

3.3 C# 存储xml文件

3.3.1 存储在哪个文件夹

存储在 PersistentDataPath 可读可写

3.3.2 存储xml文件








3.4 C# 修改xml文件

先移除 再添加

两个方法得到子结点的子结点


4 XML 序列化

4.1 什么是序列化和反序列化

大概就是 把对象转化成可传输的字节顺序

4.2 xml 序列化




这种序列化不能存储 private protect ,只能存public

也可以存数组 和list

不支持字典的序列化

4.3 自定义结点





5 xml 反序列化

5.1 判断文件是否存在

5.2 反序列化

这里会有问题,如果对象初始化了值,再反序列时,不会覆盖初始化值了的属性。所以会出现重复读取

所以最好不要对类进行初始化,

6 IXmlSerializeable 接口(自定义xmlSerializeable类)

6.1 继承 IXmlSerializable

在需要序列化的类继承IXmlSerializable

需要实现三个函数

第一个函数直接返回null就行

在函数中可以自定义序列化 的规则

6.2 WriteXml函数

6.2.1 存属性


6.2.2 存结点


6.2.3 写包裹结点



6.3 ReadXml函数

6.3.1 读属性

6.3.2 读结点

方式1:


读到test1

读到test2

方式2:

6.3.3 读包裹节点

6.4 让dictionary支持序列化反序列化

自定义一个dictionary,让其继承dictionary和 IXMLserializable

6.4.1 序列化


6.4.2 反序列化

7 xml数据管理类

测试类

7.1 存储

7.2 读取

相关推荐
Warren981 分钟前
软件测试-Selenium学习笔记
java·javascript·笔记·学习·selenium·测试工具·安全
SmalBox37 分钟前
【渲染流水线】[逐片元阶段]-[裁剪测试]以UnityURP为例
unity·渲染
在路上`2 小时前
前端学习之后端小白java的一些理论知识(框架)
java·学习
练习时长两年半的Java练习生(升级中)2 小时前
从0开始学习Java+AI知识点总结-18.web基础知识(Java操作数据库)
java·学习·web
Jayyih2 小时前
嵌入式系统学习Day19(数据结构)
数据结构·学习
xy_recording3 小时前
Day08 Go语言学习
开发语言·学习·golang
山烛4 小时前
矿物分类系统开发笔记(二):模型训练[删除空缺行]
人工智能·笔记·python·机器学习·分类·数据挖掘
黑客影儿4 小时前
黑客哲学之学习笔记系列(三)
笔记·学习·程序人生·安全·职场和发展·网络攻击模型·学习方法
与火星的孩子对话4 小时前
Unity高级开发:反射原理深入解析与实践指南 C#
java·unity·c#·游戏引擎·lucene·反射
Starry_hello world6 小时前
MySql 表的约束
数据库·笔记·mysql·有问必答