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

相关推荐
巴伦是只猫29 分钟前
【机器学习笔记Ⅰ】13 正则化代价函数
人工智能·笔记·机器学习
好好研究1 小时前
学习栈和队列的插入和删除操作
数据结构·学习
新中地GIS开发老师2 小时前
新发布:26考研院校和专业大纲
学习·考研·arcgis·大学生·遥感·gis开发·地理信息科学
SH11HF3 小时前
小菜狗的云计算之旅,学习了解rsync+sersync实现数据实时同步(详细操作步骤)
学习·云计算
旷世奇才李先生3 小时前
XML Schema 安装使用教程
xml
Frank学习路上3 小时前
【IOS】XCode创建firstapp并运行(成为IOS开发者)
开发语言·学习·ios·cocoa·xcode
Chef_Chen4 小时前
从0开始学习计算机视觉--Day07--神经网络
神经网络·学习·计算机视觉
X_StarX6 小时前
【Unity笔记02】订阅事件-自动开门
笔记·学习·unity·游戏引擎·游戏开发·大学生
MingYue_SSS6 小时前
开关电源抄板学习
经验分享·笔记·嵌入式硬件·学习
巴伦是只猫7 小时前
【机器学习笔记 Ⅱ】1 神经网络
笔记·神经网络·机器学习