using System.Collections; using System.Collections.Generic; using System.Runtime.Serialization.Formatters.Binary; using System.Runtime.Serialization; using System.IO; using UnityEngine; namespace Networking { public static class Utility { public static byte[] ObjectToByteArray(T obj) { if (obj == null) return null; BinaryFormatter bf = new BinaryFormatter(); SurrogateSelector surrogateSelector = new SurrogateSelector(); Vector3SerializationSurrogate vector3SS = new Vector3SerializationSurrogate(); ColorSerializationSurrogate colorSS = new ColorSerializationSurrogate(); surrogateSelector.AddSurrogate(typeof(Vector3), new StreamingContext(StreamingContextStates.All), vector3SS); surrogateSelector.AddSurrogate(typeof(Color), new StreamingContext(StreamingContextStates.All), colorSS); bf.SurrogateSelector = surrogateSelector; MemoryStream ms = new MemoryStream(); bf.Serialize(ms, obj); return ms.ToArray(); } public static T ByteArrayToObject(byte[] arrBytes) { MemoryStream memStream = new MemoryStream(); BinaryFormatter bf = new BinaryFormatter(); SurrogateSelector surrogateSelector = new SurrogateSelector(); Vector3SerializationSurrogate vector3SS = new Vector3SerializationSurrogate(); ColorSerializationSurrogate colorSS = new ColorSerializationSurrogate(); surrogateSelector.AddSurrogate(typeof(Vector3), new StreamingContext(StreamingContextStates.All), vector3SS); surrogateSelector.AddSurrogate(typeof(Color), new StreamingContext(StreamingContextStates.All), colorSS); bf.SurrogateSelector = surrogateSelector; memStream.Write(arrBytes, 0, arrBytes.Length); memStream.Seek(0, SeekOrigin.Begin); T obj = (T)bf.Deserialize(memStream); return obj; } } }