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

相关推荐
派大猩猩_8 分钟前
选题散在 20 篇笔记里?Nutstore Sync在 Obsidian 里创建选题小工具,创作动线短一半
笔记·obsidian·obsidian插件·obsidian ai
前进的李工12 分钟前
Agent 学习笔记 04:KV Cache 与上下文缓存
笔记·学习·缓存·agent·注意力机制·kv cache·prompt cache
平行云19 分钟前
建筑BIM/3D可视化轻量级实时评审与分享方案
unity·ue5·3dsmax·实时云渲染·云桌面·云游戏·建筑bim
Z21-X24 分钟前
云原生运维笔记:打通OpenStack的任督二脉——从Neutron网络踩坑到Swift与Heat硬核实战
运维·笔记·学习·云原生
旖旎夜光28 分钟前
LCR 170:交易逆序对的总数(归并排序) —— 题解
c++·学习·算法·leetcode·排序算法
SEO_juper39 分钟前
Go 站点地图生成器:从首页爬全站,一键生成 sitemap.xml
xml·开发语言·人工智能·golang·node.js·seo·外贸独立站
摇滚侠9 小时前
《On Java 中文版 基础卷》阅读笔记 实现隐藏 12
java·数据库·笔记
小向是个Der9 小时前
嵌入式进阶——MCU上电后的动作
c语言·单片机·mcu·学习·链接脚本
silvamux_11 小时前
10款模型写种草笔记:可发布性、返工来源与成本数据缺口复盘
java·数据库·笔记
蒸蒸yyyyzwd12 小时前
kafka、redis、mysql不熟悉问题总结
笔记·八股