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

相关推荐
ImomoTo25 分钟前
HarmonyOS学习(十三)——数据管理(二) 关系型数据库
数据库·学习·harmonyos·arkts·鸿蒙
开MINI的工科男2 小时前
【笔记】自动驾驶预测与决策规划_Part3_路径与轨迹规划
人工智能·笔记·自动驾驶·预测与决策
wang_book2 小时前
Gitlab学习(007 gitlab项目操作)
java·运维·git·学习·spring·gitlab
weixin_455446173 小时前
Python学习的主要知识框架
开发语言·python·学习
Ylucius5 小时前
动态语言? 静态语言? ------区别何在?java,js,c,c++,python分给是静态or动态语言?
java·c语言·javascript·c++·python·学习
dangoxiba6 小时前
【Unity学习心得】如何使用Unity制作“饥荒”风格的俯视角2.5D游戏
游戏·unity·c#·游戏引擎
LvManBa6 小时前
Vue学习记录之六(组件实战及BEM框架了解)
vue.js·学习·rust
LvManBa6 小时前
Vue学习记录之三(ref全家桶)
javascript·vue.js·学习
洛寒瑜6 小时前
【读书笔记-《30天自制操作系统》-23】Day24
开发语言·汇编·笔记·操作系统·应用程序