Unity中将类对象保存到XML中
来源:互联网 发布:linux内核进程调度 编辑:程序博客网 时间:2024/05/01 07:24
该代码包含两个功能
(1)在Unity中在本地创建XML文件,将类对象转换为字符串保存到XML文件中
(2)将存入的XML文件读取出来转换为相应的 类对象
using UnityEngine;using System;using System.Collections;using System.Collections.Generic;using System.IO;using System.Xml;using System.Xml.Serialization;using System.Text;public class AAA{ public int num; public BBB bbb; public AAA() { num = 0; bbb = new BBB(); }}public class BBB{ string name; public BBB() { name = "aaaaa"; }}// 将类对象保存为 XML, 将XML读取为类对象public class WriteReadTxt : MonoBehaviour { string path = ""; void Start() { path = Application.dataPath + "StreamingAssets/AAA/1.xml"; } void Update() { if (Input.GetKeyDown(KeyCode.A)) // 保存对象 { AAA aaa = new AAA(); CreateWriteXML<AAA>( path, aaa, true); // 将类直接保存为 XML文件 } if (Input.GetKeyDown(KeyCode.D)) // 读取对象 { AAA aaa = new AAA(); aaa = ReadXmlFile<AAA>(path); // 将读取的XML文件转换为类 } } // 创建写入文件 , 参数1 文件路径, 参数 2 写入信息, 参数3 是否删除之前的重新创建 public void CreateWriteFile(string path, string info, bool isRelace) { StreamWriter sw; FileInfo t = new FileInfo( path); //获取路径下文件信息if (t.Exists && isRelace) //如果存在则删除{File.Delete(path);} if (!t.Exists) //如果文件不存在则创建一个 {sw = t.CreateText(); } else { sw = t.AppendText(); } sw.WriteLine( info); //写入信息 sw.Close(); sw.Dispose(); } //读取文件, 参数1 文件路径, 参数2 保存路径的集合 public List<string> ReadTxtFile(string path, List<string> saveList) { FileInfo info = new FileInfo(path); //获取路径下文件信息 if (!info.Exists) //如果不存在返回 {Debug.Log("!exist " + path); return saveList; } StreamReader sr = null; sr = File.OpenText(path); //存在则打开文件 string line; while ((line = sr.ReadLine()) != null) // 一行一行读取文件 { saveList.Add(line); //向保存文件集合添加 路径字符串 } sr.Close(); sr.Dispose(); return saveList; } // 参数1 路径,参数2 需要保存的类,参数3 是否需要替换 public void CreateWriteXML<T>( string path, T t, bool isRelace) { string data = SerializeObject<T>(t); // 将类对象转换为 字符串 CreateWriteFile(path, data, isRelace); } public T ReadXmlFile<T>(string path) { List<string> dataList = new List<string>(); string data = ""; dataList = ReadTxtFile(path, dataList); foreach (string str in dataList) { data += str; } T t = (T)DeserializeObject<T>(data); return t; } private string UTF8ByteArrayToString(byte[] characters) { UTF8Encoding encoding = new UTF8Encoding(); string constructedString = encoding.GetString(characters); return (constructedString); } private byte[] StringToUTF8ByteArray(string pXmlString) { UTF8Encoding encoding = new UTF8Encoding(); byte[] byteArray = encoding.GetBytes(pXmlString); return byteArray; } // 保存xml 前先将 类对象转换为 字符串 private string SerializeObject<T>(object pObject) { string XmlizedString = null; MemoryStream memoryStream = new MemoryStream(); //XmlSerializer xs = new XmlSerializer(typeof(UserData)); XmlSerializer xs = new XmlSerializer(typeof(T)); XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8); xs.Serialize(xmlTextWriter, pObject); memoryStream = (MemoryStream)xmlTextWriter.BaseStream; XmlizedString = UTF8ByteArrayToString(memoryStream.ToArray()); return XmlizedString; } // 将读取的xml字符串转换为 类对象 private object DeserializeObject<T>(string pXmlizedString) { //XmlSerializer xs = new XmlSerializer(typeof(UserData)); XmlSerializer xs = new XmlSerializer(typeof(T)); MemoryStream memoryStream = new MemoryStream(StringToUTF8ByteArray(pXmlizedString)); XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8); return xs.Deserialize(memoryStream); }}
0 0
- Unity中将类对象保存到XML中
- Java中将图片保存到数据库中
- java中将图片保存到数据库中
- java中将图片保存到数据库中
- ThinkPHP中将session保存到memcache中
- Android中将图片保存到数据库中
- struts2 中将对象保存到session中在页面无法获得
- 在action中将字符串、对象、list集合保存到session中,在jsp页面获取
- java中将数据对象序列化后保存到数据库中,并反序列化取出显示
- android中将txt文件保存到SD卡中
- Android中将二维码图片保存到SD卡中
- iOS中将图片保存到自定义相册中
- Unity中 保存图片到相册
- 保存对象到文件中
- 【Unity】Unity中通过纹理截屏将图片保存到本地
- 改变unity场景的图片比例保存到xml当中
- 保存类中变量或属性到XML配置文件
- 保存类中变量或属性到XML配置文件
- 字典树原理(转)
- CentOS中Apache配置实现绑定多个域名
- UIReferenceLibraryViewController:App中字典词义查询的实现
- Linux下vsftpd配置
- excel中自动填充到最后一行
- Unity中将类对象保存到XML中
- Java Socket实战之三 传输对象
- 关于gson的解析
- 揭秘Android App的工作原理-乐居猫学Android开发
- 【codeforces】2014-2015ACM-ICPC CERC 14 Problem J: Pork barrel 【LCT+主席树】
- HDU 4487 Maximum Random Walk 概率DP
- 生活中的磨难
- 空指针、void*指针、new及delete
- Python中的matplotlib用法(转载)