换平台确实是一个头疼的问题,本来在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序列化与反序列化 多平台的更多相关文章

  1. XML 序列化与反序列化

    XML序列化与反序列化 1.将一个类转化为XML文件 /// <summary> /// 对象序列化成XML文件 /// </summary> /// <param na ...

  2. XmlSerializer 对象的Xml序列化和反序列化

    http://www.cnblogs.com/yukaizhao/archive/2011/07/22/xml-serialization.html 这篇随笔对应的.Net命名空间是System.Xm ...

  3. C#的XML序列化及反序列化

    webservice在工作中用到的很多,基本都是以XML格式问通讯内容,其中最关键的就是XML串的序列化及反序列化. XML的运用中有两种信息传递,一种为XML的请求信息,另一种为返回信息,要运用XM ...

  4. .NET XML序列化与反序列化

    闲着没事,写了两个通用的XML序列化与反序列化的方法. 贴出来当作笔记吧! /// <summary> /// XML序列化 /// </summary> /// <ty ...

  5. XmlSerializer 对象的Xml序列化和反序列化,XMLROOT别名设置

    这篇随笔对应的.Net命名空间是System.Xml.Serialization:文中的示例代码需要引用这个命名空间.   为什么要做序列化和反序列化? .Net程序执行时,对象都驻留在内存中:内存中 ...

  6. c# XML序列化与反序列化

    c# XML序列化与反序列化 原先一直用BinaryFormatter来序列化挺好,可是最近发现在WinCE下是没有办法进行BinaryFormatter操作,很不爽,只能改成了BinaryWrite ...

  7. Xml序列化、反序列化帮助类

    之前从网络上找了一个Xml处理帮助类,并整理了一下,这个帮助类针对Object类型进行序列化和反序列化,而不需要提前定义Xml的结构,把它放在这儿供以后使用 /// <summary> / ...

  8. Windows phone 之XML序列化与反序列化

    为什么要做序列化和反序列化? 一个回答: 我们都知道对象是不能在网络中直接传输的,不过还有补救的办法.XML(Extensible Markup Language)可扩展标记语言,本身就被设计用来存储 ...

  9. C#操作Xml:XmlSerializer 对象的Xml序列化和反序列化

    这篇随笔对应的.Net命名空间是System.Xml.Serialization:文中的示例代码需要引用这个命名空间. 为什么要做序列化和反序列化? .Net程序执行时,对象都驻留在内存中:内存中的对 ...

随机推荐

  1. 论Android代码加固的意义和hook

    加固的意义 从安卓2.x版本起,加固技术就逐渐火了起来.最初,只有一些创业型公司涉及加固领域:随着安卓应用的逐渐升温,诸如阿里.腾讯.百度等大型互联网公司逐渐涉及该领域. 那么为什么要对APP进行加固 ...

  2. SQL Server 索引维护(1)——系统常见的索引问题

    前言: 在很多系统中,比如本人目前管理的数据库,索引经常被滥用,甚至使用DTA(数据库引擎优化顾问)来成批创建索引(DTA目前个人认为它的真正用处应该是在发现缺失的统计信息,在以前的项目中,用过一次D ...

  3. Java的LinkedList详解,看源码之后的总结

    1. LinkedList实现了一个带表头的双向循环链表: 2. LinkedList是线程不同步的: 3. LinkedList中实现了push.pop.peek.empty等方法,因此Linked ...

  4. maven隐式依赖引起的包冲突

    包冲突 使用maven管理项目时可能会遇到包冲突的情况比如:log4j-over-slf4j.jar 和 slf4j-log4j12.jar这两个包同时一起运行时就会有问题. 这种冲突可能是显式依赖导 ...

  5. Maven 介绍、安装使用

    简介         Maven是一个强大的构建工具,能够帮我们自动化构建过程,从清理.编译.测试到生成报告,再到打包和部署.只要使用Maven配置好项目,然后执行命令(如mvn clean inst ...

  6. android EventBus 3.0使用指南

    Enventbus的作用和好处我就不多说了,这里介绍下怎么使用. 2.+版本的使用方法 public void onEvent(MessageEvent event) { log(event.mess ...

  7. 开源项目——小Q聊天机器人V1.1

    小Q聊天机器人V1.0 http://blog.csdn.net/baiyuliang2013/article/details/51386281 小Q聊天机器人V1.1 http://blog.csd ...

  8. (一〇九)UIButton的使用技巧 -imageView、titleLabel、圆角等

    UIButton是一个常用控件,使用方法十分基本,但是有很多技巧常常不被注意,本文主要介绍UIButton的一些较高级技巧,用于实现图片和标签显示的美观性等. 开发时常常碰到按钮的下侧或者右侧有标题的 ...

  9. Dom4j修改xml文档引入

    前面介绍了如何解析xnl文档的内容,这里对修改xml展开讨论. 一.首先看一下,写出内容到xml文档的主要代码: XMLWriter writer = new XMLWriter(OutputStre ...

  10. 方便使用FFMPEG的经验

    FFMPEG是命令行工具,因此使用起来多少还是会有些不方便.在这记录两点方便使用FFMPEG的方法: 1.任何目录下都可以使用FFMPEG 问题描述:需要转码(播放)的时候,需要把ffmpeg.exe ...