简单的序列化,网上很多,但是突然想到一个问题,如果一个类里用到了另一个,那么怎么办,今天试了试,只需要加上序列号标签就可以了

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using System.IO;
using System.Xml.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text; [Serializable]
public class TEST
{
public string name;
public int age;
public Test01 tes;
} [Serializable]
public class Test01
{
public float mo;
public int[] sum;
} public class Seralizabletest : MonoBehaviour {
public byte[] data;
// Use this for initialization
void Start () {
Test();
} // Update is called once per frame
void Update () {
if(Input.GetKeyDown(KeyCode.Space))
{
DeTest();
}
} void Test()
{
TEST EST = new TEST();
EST.age = ;
EST.name = "lizhiyong";
Test01 test01 = new Test01();
test01.mo = 0.5f;
test01.sum = new int[] { , , , };
EST.tes = test01; data = SerializeHelper.SerializeToBinary(EST);
} void DeTest()
{
TEST EST = SerializeHelper.DeserializeWithBinary<TEST>(data);
Debug.LogError(EST.age);
Debug.LogError(EST.name);
Debug.LogError(EST.tes.mo);
Debug.LogError(EST.tes.sum[]);
} } public static class SerializeHelper
{
/// <summary>
/// 使用UTF8编码将byte数组转成字符串
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public static string ConvertToString(byte[] data)
{
return Encoding.UTF8.GetString(data, , data.Length);
} /// <summary>
/// 使用指定字符编码将byte数组转成字符串
/// </summary>
/// <param name="data"></param>
/// <param name="encoding"></param>
/// <returns></returns>
public static string ConvertToString(byte[] data, Encoding encoding)
{
return encoding.GetString(data, , data.Length);
} /// <summary>
/// 使用UTF8编码将字符串转成byte数组
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static byte[] ConvertToByte(string str)
{
return Encoding.UTF8.GetBytes(str);
} /// <summary>
/// 使用指定字符编码将字符串转成byte数组
/// </summary>
/// <param name="str"></param>
/// <param name="encoding"></param>
/// <returns></returns>
public static byte[] ConvertToByte(string str, Encoding encoding)
{
return encoding.GetBytes(str);
} /// <summary>
/// 将对象序列化为二进制数据
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public static byte[] SerializeToBinary(object obj)
{
MemoryStream stream = new MemoryStream();
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(stream, obj); byte[] data = stream.ToArray();
stream.Close(); return data;
} /// <summary>
/// 将对象序列化为XML数据
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public static byte[] SerializeToXml(object obj)
{
MemoryStream stream = new MemoryStream();
XmlSerializer xs = new XmlSerializer(obj.GetType());
xs.Serialize(stream, obj); byte[] data = stream.ToArray();
stream.Close(); return data;
} /// <summary>
/// 将二进制数据反序列化
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public static object DeserializeWithBinary(byte[] data)
{
MemoryStream stream = new MemoryStream();
stream.Write(data, , data.Length);
stream.Position = ;
BinaryFormatter bf = new BinaryFormatter();
object obj = bf.Deserialize(stream); stream.Close(); return obj;
} /// <summary>
/// 将二进制数据反序列化为指定类型对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="data"></param>
/// <returns></returns>
public static T DeserializeWithBinary<T>(byte[] data)
{
return (T)DeserializeWithBinary(data);
} /// <summary>
/// 将XML数据反序列化为指定类型对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="data"></param>
/// <returns></returns>
public static T DeserializeWithXml<T>(byte[] data)
{
MemoryStream stream = new MemoryStream();
stream.Write(data, , data.Length);
stream.Position = ;
XmlSerializer xs = new XmlSerializer(typeof(T));
object obj = xs.Deserialize(stream); stream.Close(); return (T)obj;
}
}

最新文章

  1. 关于select那点事
  2. 【Leetcode】【Medium】word search
  3. 十大技巧快速提升原生APP开发性能
  4. String类方法
  5. Gentoo 网络接口配置文件说明
  6. c++继承详解
  7. 《Node.js开发指南》知识整理
  8. 201521123008《Java程序设计》第10周学习总结
  9. SQL优化实用方法
  10. iOS 字典实现原理
  11. python中的闭包和装饰器
  12. Ubuntu系统下Anaconda使用方法总结
  13. 2 Servlet 细节
  14. AMM调整为ASMM命令(关闭memory_target自动管理方式)
  15. Ubuntu 14.04 将一个sh文件制作成类似于windows下的可以双击执行的快捷方式
  16. 跟厂长学PHP7内核(五):系统分析生命周期
  17. spring Quartz基于配置文件和注解的实现
  18. redis 的 HyperLogLog
  19. Jmeter性能测试实践之java请求
  20. [android] AndroidManifest.xml - 【 manifest -&gt; application】

热门文章

  1. Android-ViewPagerIndicator框架使用——Circle
  2. modelform 对象和model之间的关系
  3. cocos2dx - 部署到android真机上错误整理
  4. Handler classes should be static or leaks might occur
  5. Ninject学习笔记&lt;三&gt;
  6. hdu1829(A Bug&#39;s Life)
  7. “线程安全的” Dictionary(TKey,TValue)
  8. 1718 Cos的多项式
  9. EasyNVR摄像机无插件流媒体服务器对所在操作系统配置的需求
  10. python系列十四:Python3 文件