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 读取

相关推荐
_李小白5 分钟前
【OPENGL ES 3.0 学习笔记】第十七天:模型矩阵、视图矩阵与投影矩阵
笔记·学习·矩阵
淮北49419 分钟前
windows11配置wsl安装ubuntu20.04
windows·学习·ubuntu·wsl
霜绛35 分钟前
C#知识补充(一)——ref和out、成员属性、万物之父和装箱拆箱、抽象类和抽象方法、接口
开发语言·笔记·学习·c#
报错小能手42 分钟前
C++笔记——STL list
c++·笔记
2301_796512521 小时前
Rust编程学习 - 如何利用代数类型系统做错误处理的另外一大好处是可组合性(composability)
java·学习·rust
Sator11 小时前
使用Unity ASE插件设置数值不会生效的问题
unity·游戏引擎
koo3642 小时前
李宏毅机器学习笔记43
人工智能·笔记·机器学习
lkbhua莱克瓦242 小时前
Java基础——常用算法3
java·数据结构·笔记·算法·github·排序算法·学习方法
做一道光2 小时前
6、foc控制——IF控制
笔记·单片机·嵌入式硬件·电机控制
moringlightyn2 小时前
进度条+ 基础开发工具----版本控制器git 调试器gdb/cgdb
笔记·git·其他·c·调试器·gdb/cgdb·进度条 倒计时