对象序列化成XML存储,XML反序列换成对象

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

public static class GameDataMgr 
{
	static public T LoadData<T>(string name,string path)
	{
		T result=default(T);
		string str_Data = LoadXML(name,path);
		if (string.IsNullOrEmpty(str_Data) == true)
		{
			return result;
		}

		result = DeserializeObject<T>(str_Data);
		return result;
	}

	static public void SaveData<T>(T data,string mPath,string mFileName)
	{
		string str_Data = SerializeObject(data);
		SaveXML(str_Data,mPath,mFileName);
	}

	static private void SaveXML(string data,string path,string fileName)
	{
		StreamWriter sw;
		FileInfo fi = new FileInfo(path + "/" + fileName);
		if (fi.Exists == false){
			sw = fi.CreateText();
		}
		else{
			fi.Delete();
			sw = fi.CreateText();
		}
		sw.Write(data);
		sw.Close();
		Debug.Log("SaveXML:" + data);
	}

	static private string LoadXML(string fileName,string path)
	{
		string str_FilePath = path + "/" + fileName;
		FileInfo fi = new FileInfo(str_FilePath);
		if (fi.Exists == false){
			return null;
		}
		StreamReader sr = File.OpenText(str_FilePath);
		if (sr != null){
			string str_Data = sr.ReadToEnd();
			sr.Close();
			return str_Data;
		}
		else{
			return null;
		}
	}

	static private string SerializeObject<T>(T obj)
	{
		string str_XmlizedString = null;
		MemoryStream ms = new MemoryStream();
		XmlSerializer xs = new XmlSerializer(typeof(T));
		XmlTextWriter xtw = new XmlTextWriter(ms,Encoding.UTF8);
		xs.Serialize(xtw,obj);
		ms = (MemoryStream)xtw.BaseStream;
		str_XmlizedString = UTF8ByteArrayToString(ms.ToArray());
		return str_XmlizedString;
	}

	static private T DeserializeObject<T>(string str_XmlizedString)
	{
		XmlSerializer xs = new XmlSerializer(typeof(T));
		MemoryStream ms = new MemoryStream(StringToUTF8ByteArray(str_XmlizedString));
		return (T)xs.Deserialize(ms);
	}

	static private string UTF8ByteArrayToString(byte[] ba)
	{
		UTF8Encoding ue = new UTF8Encoding();
		string str_Constructed = ue.GetString(ba);
		return (str_Constructed);
	}

	static private byte[] StringToUTF8ByteArray(string str_XmlString)
	{
		UTF8Encoding ue = new UTF8Encoding();
		byte[] ba = ue.GetBytes(str_XmlString);
		return ba;
	}	
}
//public class SmallGameData{
//	public string name;
//}

实例

using UnityEngine;
using System.Collections;

public class SmallGameData{
	static private SmallGameData instence;
	static public SmallGameData Instence{
		get{
			if(instence==null){
				instence=GameDataMgr.LoadData<SmallGameData>(SmallGameData.FileName,SmallGameData.FileName);
				if(instence==null){
					instence=new SmallGameData();
				}
			}
			return instence;
		}
	}

	private SmallGameData(){

	}

	static private string filePath=Application.persistentDataPath;
	static public string FilePath {get {return filePath;}}

	static private string fileName="SmallGameData.xml";
	static public string FileName {get {return fileName;}}


	private string name;
	public string Name {get {return name;}set {name = value;}}
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇