pc与web平台利用xml写一个序列化与反序列化用来存储数据
来源:互联网 发布:js更改input type 编辑:程序博客网 时间:2024/04/29 01:21
换平台确实是一个头疼的问题,本来在pc用.net的json处理数据很是顺手的,但是发布web版本后,发现他不支持。后面找了好几个开源json都不能很好的支持web,或者不能支持List等。于是我就想着自己利用xml写一个序列化与反序列化用来存储数据或者解析数据。这里我只测试了pc与web平台,移动端的没有测试。
自定义xml序列化脚本,因为可能使用到中文,所以设置utf-8编码:
using Engine;
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);
}
}
测试脚本:
[csharp] view plain copy
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));
}
}
自定义xml序列化脚本,因为可能使用到中文,所以设置utf-8编码:
using Engine;
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);
}
}
测试脚本:
[csharp] view plain copy
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));
}
}
0 0
- pc与web平台利用xml写一个序列化与反序列化用来存储数据
- 序列化与反序列化用于对象存储
- Unity的数据序列化与反序列化用于网络传输
- unity xml序列化与反序列化 多平台
- XML序列化与反序列化
- XML序列化与反序列化
- XML序列化与反序列化
- XML序列化与反序列化
- XML序列化与反序列化
- XML序列化与反序列化
- XML序列化与反序列化
- xml 序列化 与 反序列化
- XML序列化与反序列化
- XML序列化与反序列化
- XML序列化与反序列化
- C#序列化与反序列化Xml,利用范型做通用化处理
- 对象与XML,序列化与反序列化
- 序列化与反序列
- Qt问题记录
- IDEA整合jrebel实现热部署
- 函数式leetcode-4
- Qt多线程基础(三)子线程与主线程通信
- DC12-85V 降压恒流led驱动方案
- pc与web平台利用xml写一个序列化与反序列化用来存储数据
- TensorFlow学习笔记(2)--运行MNIST例子
- Android开发如何使用多进程
- 欢迎使用CSDN-markdown编辑器
- Android实现类似于PC中的右键弹出菜单效果
- Hanlder异步消息自总结
- js倒计时一分钟
- 每天一个算法之是否为后续遍历序列
- 开源视频检索技术VedioSearch调研