IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Unity-Xml数据解析 -> 正文阅读

[游戏开发]Unity-Xml数据解析

在Unity中使用Xml序列化和反序列化,是不需要像LitJson那样引入一个单独的类库,我们可以直接使用System.Xml,以及System.Xml.Serialization来进行Xml的序列化和反序列化。
我们就以用户名和密码的类对象来举例。

一、Xml序列化

逻辑很简单,通过API获取C#对象的Stream文件流,再转码成string字符串,为了方便通用,这里使用泛型进行了提取,代码如下:

using System.Text;
using UnityEngine;
using System.IO;
using System.Xml.Serialization;
using System.Xml;

public class Test : MonoBehaviour
{
    /// <summary>
    /// 登录验证信息
    /// </summary>
    public class LoginInfo
    {
        public string userName;
        public string password;

        public LoginInfo() { }

        public LoginInfo(string userName, string password)
        {
            this.userName = userName;
            this.password = password;
        }
    }

    private void Start()
    {
        LoginInfo loginInfo = new LoginInfo("admin","123456");
        
        MemoryStream memoryStream = new MemoryStream();
        string xmlStr = ToXml<LoginInfo>(loginInfo);

        Debug.Log(xmlStr);
    }

    /// <summary>
    /// Xml序列化
    /// </summary>
    /// <typeparam name="T">类型</typeparam>
    /// <param name="arg">对象</param>
    /// <returns></returns>
    private string ToXml<T>(object arg)
    {
        MemoryStream memoryStream = new MemoryStream();
        XmlSerializer xs = new XmlSerializer(typeof(T));
        XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
        xs.Serialize(xmlTextWriter, arg);
        memoryStream = (MemoryStream)xmlTextWriter.BaseStream;
        string xmlStr = Encoding.UTF8.GetString(memoryStream.ToArray());
        return xmlStr;
    }
}

这里需要注意的是,我们在定义类的构造函数时,必须要构建一个无参的构造函数,否则序列化会失败。
最终结果(此结果经过Xml在线解析工具解析后):

<?xml version="1.0" encoding="utf-8"?>
<LoginInfo 
	xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">	
	<userName>admin</userName>
	<password>123456</password>
</LoginInfo>

二、Xml反序列化

我们可以在Unity项目面板创建StreamignAssets文件夹,创建Test.xml文件,将以上结果复制进来,为下面反序列化做准备。
这里我使用VSCode打开并编辑,各位同学可使用记事本/VS编辑。
在这里插入图片描述
好了,直接上代码:

using UnityEngine;
using System.IO;
using System.Xml.Serialization;

public class Test : MonoBehaviour
{
    /// <summary>
    /// 登录验证信息
    /// </summary>
    public class LoginInfo
    {
        public string userName;
        public string password;

        public LoginInfo() { }

        public LoginInfo(string userName, string password)
        {
            this.userName = userName;
            this.password = password;
        }
    }

    private void Start()
    {
        //文件路径
        string filePath = Application.streamingAssetsPath + "/Test.xml";
        StreamReader streamReader = new StreamReader(filePath);

        LoginInfo loginInfo = ToObject<LoginInfo>(streamReader.BaseStream);

        Debug.Log(loginInfo.userName);
    }

    /// <summary>
    /// Xml反序列化
    /// </summary>
    /// <typeparam name="T">类型</typeparam>
    /// <param name="stream">文件流</param>
    /// <returns></returns>
    private T ToObject<T>(Stream stream)
    {
        XmlSerializer serializer = new XmlSerializer(typeof(T));
        T type = (T)serializer.Deserialize(stream);
        return type;
    }
}

逻辑如下:这里使用IO中的StreamReader,获取文件流,传入并调用API直接反序列化为C#对象。
最终结果:
在这里插入图片描述
如果是接口返回的数据或在WebGL平台,可以使用UnityWebRequest获取byte[]字节数组,转化为Stream,再调用API,即可实现Xml反序列化。

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-04-29 12:26:54  更:2022-04-29 12:29:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/31 1:07:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码