1. 程式人生 > >c# 類的序列化,以及嵌套問題

c# 類的序列化,以及嵌套問題

serializa art per pep bytes 嵌套 spa 只需要 typeof

簡單的序列化,網上很多,但是突然想到一個問題,如果一個類裏用到了另一個,那麽怎麽辦,今天試了試,只需要加上序列號標簽就可以了

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 = 10; EST.name = "lizhiyong"; Test01 test01 = new Test01(); test01.mo
= 0.5f; test01.sum = new int[4] { 0, 1, 2, 3 }; 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[3]); } } 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, 0, 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, 0, 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, 0, data.Length); stream.Position = 0; 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, 0, data.Length); stream.Position = 0; XmlSerializer xs = new XmlSerializer(typeof(T)); object obj = xs.Deserialize(stream); stream.Close(); return (T)obj; } }

c# 類的序列化,以及嵌套問題