加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Unity3d 实现对象的XML格式化和反序列化

发布时间:2020-12-16 09:02:25 所属栏目:百科 来源:网络整理
导读:一般储存怪的数据的时候,都会想到数据库,操作数据库需要导入dll文件,手机平台能够支持, 但是网页平台不支持(如果数据库放在服务端,就没有这个问题了), 所以想到用XML格式来存储数据,数据量也不大,操作也简单,可以直接将对象存为xml文件,而且玩家本
 一般储存怪的数据的时候,都会想到数据库,操作数据库需要导入dll文件,手机平台能够支持,但是网页平台不支持(如果数据库放在服务端,就没有这个问题了), 所以想到用XML格式来存储数据,数据量也不大,操作也简单,可以直接将对象存为xml文件,而且玩家本地存档也会用到。
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
//添加两个包
using System.Xml.Serialization;
using System.IO;

public class ttt
{
[XmlAttribute]
public string id;
 public ttt() { }
public ttt(string s) { id = s; }
}
[SerializeField]//必须设置这个,要不然不能进行序列化
public class baseData
{
public string id;
[XmlAttribute]//设置为属性,而不是node
public int level;
public float exp;
[XmlIgnore]//XmlIgnore 序列化中忽略掉
public string testIgnore = "ssdf";
//get set设置的方式也可以进行序列化, 但是私有的不行
private int _seddd = 10;
public int seddd
{
get { return _seddd; }
set { _seddd = value; }
}
//可以设置数组结点和子结点的名字,如果不设置则为变量名和类型名字
[XmlArray("items"),XmlArrayItem("item")]
public ttt[] sss;
 //支持list
public List<ttt> aaa;
}

public class testXMLSave : MonoBehaviour
{
//编辑器中跟目录是项目的目录, 如果要在运行中进行存档或修改的操作,要使用别的路劲
const string xmlPath = "Assets/booktest.xml";
void Start ()
{
//创建一个basedata对象
baseData data = new baseData();
 data.id = "123455";
data.level = 20;
data.exp = 15.5f;
 data.sss = new ttt[3];
data.sss[0] = new ttt();
data.sss[0].id = "aaa2";
data.sss[1] = new ttt();
data.sss[1].id = "aaa1";
 data.aaa = new List<ttt>();
data.aaa.Add(new ttt("10"));
data.aaa.Add(new ttt("20"));
 //序列化为XML文件
XMLSerialize(data);
}

void XMLSerialize(baseData data)
{
 //写入的路径
TextWriter writer = new StreamWriter(xmlPath);
XmlSerializer obj = new XmlSerializer(typeof(baseData));
obj.Serialize(writer,data);
writer.Close();
 Debug.Log("dfdfsdf");
}
 //将XML格式的文件反序列化为对象
void XMLDeserialize()
{
//读取xml
TextReader writer = new StreamReader(xmlPath);
XmlSerializer obj = new XmlSerializer(typeof(baseData));
baseData data = obj.Deserialize(writer) as baseData;
writer.Close();
Debug.Log("load done:" + data.id);
}
 void OnGUI()
{
//点击进行反序列化
if (GUILayout.Button("Deserialize"))
{
XMLDeserialize();
}
}
}


将上面的代码绑定到场景里的任意对象上,执行后就会生成一个booktest.xml文件,并且点击Deserialize按钮后打印出了data.id的信息。说明已经成功将XML文件反序列化为对象了(不放心的话可以打断点查看对象数据)。

<?xml version="1.0" encoding="utf-8"?>
<baseData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" level="20"> <id>123455</id> <exp>15.5</exp> <items> <item id="aaa2" /> <item id="aaa1" /> </items> <aaa> <ttt id="10" /> <ttt id="20" /> </aaa> <seddd>10</seddd></baseData>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读