unity xml序列化与反序列化 多平台
换平台确实是一个头疼的问题,本来在pc用.net的json处理数据很是顺手的,但是发布web版本后,发现他不支持。后面找了好几个开源json都不能很好的支持web,或者不能支持List等。于是我就想着自己利用xml写一个序列化与反序列化用来存储数据或者解析数据。这里我只测试了pc与web平台,移动端的没有测试。
自定义xml序列化脚本,因为可能使用到中文,所以设置utf-8编码:
using UnityEngine;
using System.Collections;
using System.Text;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
using System; /// <summary>
/// XML序列化
/// </summary>
public class CustomXMLData { private static CustomXMLData xmlData;
/// <summary>
/// 获取本类对象
/// </summary>
/// <returns></returns>
public static CustomXMLData getInstance()
{
if (xmlData == null)
{
xmlData = new CustomXMLData();
}
return xmlData;
} /// <summary>
/// 序列化--内存流
/// </summary>
/// <param name="pObject">对象</param>
/// <param name="t">类型</param>
/// <returns></returns>
public string SerializeObject(object pObject, Type t)
{
string XmlizedString = null;
MemoryStream memoryStream = new MemoryStream();
XmlSerializer xs = new XmlSerializer(t);
XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
xs.Serialize(xmlTextWriter, pObject);
memoryStream = (MemoryStream)xmlTextWriter.BaseStream;
XmlizedString = UTF8ByteArrayToString(memoryStream.ToArray());
Debug.Log("" + XmlizedString);
return XmlizedString; } /// <summary>
/// 字节转string
/// </summary>
/// <param name="characters">字节数组</param>
/// <returns></returns>
private string UTF8ByteArrayToString(byte[] characters)
{
UTF8Encoding encoding = new UTF8Encoding();
string constructedString = encoding.GetString(characters);
return (constructedString);
} /// <summary>
/// 反序列化
/// </summary>
/// <param name="pXmlizedString">string内容</param>
/// <param name="t">类型</param>
/// <returns></returns>
public object DeserializeObject(string pXmlizedString, Type t)
{
XmlSerializer xs = new XmlSerializer(t);
MemoryStream memoryStream = new MemoryStream(StringToUTF8ByteArray(pXmlizedString));
XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
return xs.Deserialize(memoryStream);
} /// <summary>
/// 字符串转字节数组
/// </summary>
/// <param name="pXmlString">字符内容</param>
/// <returns></returns>
private byte[] StringToUTF8ByteArray(string pXmlString)
{
UTF8Encoding encoding = new UTF8Encoding();
byte[] byteArray = encoding.GetBytes(pXmlString);
return byteArray;
} /// <summary>
/// 序列化--XML文件
/// </summary>
/// <param name="pObject">对象</param>
/// <param name="t">类型</param>
/// <param name="XMLPath">生成的xml路径</param>
public void SerializeObjectXML(object pObject, Type t,string XMLPath)
{
XmlWriterSettings ws = new XmlWriterSettings();
ws.Encoding = Encoding.UTF8;
XmlWriter xmTextWriter = XmlWriter.Create(XMLPath, ws);
XmlSerializer xmlFormat = new XmlSerializer(t);
xmlFormat.Serialize(xmTextWriter,pObject);
}
}
测试脚本:
using UnityEngine;
using System.Collections; public class Test : MonoBehaviour { // Use this for initialization
void Start () {
//定义Player对象
Player player = new Player("学号ID",50,26.5f); //序列化 通过内存流转为字符串,可以将字符串存于数据库中存储操作或其他操作
string serStr=CustomXMLData.getInstance().SerializeObject(player,typeof(Player));
//反序列化 将字符串解析为Player对象
Player tempPlayer = (Player)CustomXMLData.getInstance().DeserializeObject(serStr, typeof(Player)); //序列化 创建本地xml文件
CustomXMLData.getInstance().SerializeObjectXML(player, typeof(Player), Application.dataPath + "/1.xml");
//读取xml的内容 并反序列化
StartCoroutine(ReadXml(Application.dataPath + "/1.xml"));
} // Update is called once per frame
void Update () { } /// <summary>
/// 读取xml的内容 并反序列化
/// </summary>
/// <param name="xmlPath">xml文件的路径</param>
/// <returns></returns>
IEnumerator ReadXml(string xmlPath)
{
Player tempPlayer=null;
WWW w = new WWW(xmlPath);
yield return w;
if(w.error==null)
tempPlayer = (Player)CustomXMLData.getInstance().DeserializeObject(w.text, typeof(Player));
} }
unity xml序列化与反序列化 多平台的更多相关文章
- XML 序列化与反序列化
XML序列化与反序列化 1.将一个类转化为XML文件 /// <summary> /// 对象序列化成XML文件 /// </summary> /// <param na ...
- XmlSerializer 对象的Xml序列化和反序列化
http://www.cnblogs.com/yukaizhao/archive/2011/07/22/xml-serialization.html 这篇随笔对应的.Net命名空间是System.Xm ...
- C#的XML序列化及反序列化
webservice在工作中用到的很多,基本都是以XML格式问通讯内容,其中最关键的就是XML串的序列化及反序列化. XML的运用中有两种信息传递,一种为XML的请求信息,另一种为返回信息,要运用XM ...
- .NET XML序列化与反序列化
闲着没事,写了两个通用的XML序列化与反序列化的方法. 贴出来当作笔记吧! /// <summary> /// XML序列化 /// </summary> /// <ty ...
- XmlSerializer 对象的Xml序列化和反序列化,XMLROOT别名设置
这篇随笔对应的.Net命名空间是System.Xml.Serialization:文中的示例代码需要引用这个命名空间. 为什么要做序列化和反序列化? .Net程序执行时,对象都驻留在内存中:内存中 ...
- c# XML序列化与反序列化
c# XML序列化与反序列化 原先一直用BinaryFormatter来序列化挺好,可是最近发现在WinCE下是没有办法进行BinaryFormatter操作,很不爽,只能改成了BinaryWrite ...
- Xml序列化、反序列化帮助类
之前从网络上找了一个Xml处理帮助类,并整理了一下,这个帮助类针对Object类型进行序列化和反序列化,而不需要提前定义Xml的结构,把它放在这儿供以后使用 /// <summary> / ...
- Windows phone 之XML序列化与反序列化
为什么要做序列化和反序列化? 一个回答: 我们都知道对象是不能在网络中直接传输的,不过还有补救的办法.XML(Extensible Markup Language)可扩展标记语言,本身就被设计用来存储 ...
- C#操作Xml:XmlSerializer 对象的Xml序列化和反序列化
这篇随笔对应的.Net命名空间是System.Xml.Serialization:文中的示例代码需要引用这个命名空间. 为什么要做序列化和反序列化? .Net程序执行时,对象都驻留在内存中:内存中的对 ...
随机推荐
- springmvc的介绍和第一个例子
SpringMVC是Spring 框架自带的一部分. SpringMVC底层基于:Servlet Struts2底层基于:filter struts1底层基于:Servlet spring 各模块 我 ...
- SQL Server专家的10个秘诀(翻译加注解)
当你点开这篇文章的时候,如果觉得没有读下去的必要,也希望你能拉到最后看看那几行字! 原文出处:https://technet.microsoft.com/en-us/magazine/gg299551 ...
- 使用std::vector优化点云动画显示一例
1. 准备 使用std::vector应该知道几点: (1)内存连续的容器,有点像数组 (2)与std::list相比,插入和删除元素比较慢- 因为数据迁移 (3)添加元素可能会引发内存分配和数据迁移 ...
- JAR、WAR、EAR的使用和区别
最近接触这几个词较多,停下来总结总结它们的区别和联系,更好的深刻理解 Jar.war.EAR.在文件结构上,三者并没有什么不同,它们都采用zip或jar档案文件压缩格式.但是它们的使用目的有所区别: ...
- 查看LOV对应查询语句的研究
一.获取当前会话id 1.方法一 tools: Help > About 2.方法二 打开个性化定义界面(如果没有权限,到系统配置文件设置中,查看是否是"隐藏诊断菜单"被设置 ...
- 1052. Linked List Sorting (25)
题目如下: A linked list consists of a series of structures, which are not necessarily adjacent in memory ...
- Android必知必会-Handler可能引起的内存泄露
在Android开发中,编写多线程通常会使用到Thread和Handler,细心的朋友会发现,很常见的写法会被编辑器提示有问题,new Handler(){} 内的代码背景颜色会变成黄色.Androi ...
- 《java入门第一季》之Socket编程通信和TCP协议通信图解
Socket编程通信图解原理: TCP协议通信图解
- Gradle 笔记——Java构建入门
Gradle是一个通用的构建工具,通过它的构建脚本你可以构建任何你想要实现的东西,不过前提是你需要先写好构建脚本的代码.而大部分的项目,它们的构建流程基本是一样的,我们不必为每一个工程都编写它的构建代 ...
- android sensor架构
Android Sensor 架构深入剖析 作者:倪键树,华清远见嵌入式学院讲师. 1.Android sensor架构 Android4.0系统内置对传感器的支持达13种,它们分别是:加速度传感器 ...