using UnityEngine;
using System;
using System.IO;
using System.Reflection;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
public class BinarySerializer {
public static byte[] Serialize(object serializableObject) {
MemoryStream memoryStream = new MemoryStream();
try {
IFormatter formatterEncode = new BinaryFormatter();
formatterEncode.Binder = new VersionDeserializationBinder();
formatterEncode.Serialize(memoryStream, serializableObject);
return memoryStream.ToArray();
} catch (Exception e) {
Debug.LogError(e + "Exception caught in encoding");
}
return null;
}
public static string SerializeToBase64String(object serializableObject) {
byte[] byteArray = Serialize(serializableObject);
return System.Convert.ToBase64String(byteArray);
}
public static object Deserialize(byte[] serializedBinary) {
try {
MemoryStream memoryStream = new MemoryStream(serializedBinary);
IFormatter formatterDecode = new BinaryFormatter();
formatterDecode.Binder = new VersionDeserializationBinder();
memoryStream.Position = 0;
return formatterDecode.Deserialize(memoryStream);
} catch (Exception e) {
Debug.LogError(e + "Exception caught in Decoding");
}
return null;
}
public static object DeserializeFromBase64String(string serializedBase64String) {
byte[] byteArray = System.Convert.FromBase64String(serializedBase64String);
return Deserialize(byteArray);
}
}
using System;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Reflection;
public sealed class VersionDeserializationBinder : SerializationBinder {
public override Type BindToType(string assemblyName, string typeName) {
if (!string.IsNullOrEmpty(assemblyName) && !string.IsNullOrEmpty(typeName)) {
Type typeToDeserialize = null;
assemblyName = Assembly.GetExecutingAssembly().FullName;
// The following line of code returns the type.
typeToDeserialize = Type.GetType(String.Format("{0}, {1}", typeName, assemblyName));
return typeToDeserialize;
}
return null;
}
}
using System.Runtime.Serialization;
using System.Security.Permissions;
[System.Serializable]
public class PositionEntity : ISerializable {
public float positionX;
public float positionY;
public float positionZ;
public PositionEntity() {
}
protected PositionEntity(SerializationInfo info, StreamingContext context)
{
if (info == null) {
throw new System.ArgumentNullException("info");
}
positionX = (float)info.GetValue("PositionX", typeof(float));
positionY = (float)info.GetValue("PositionY", typeof(float));
positionZ = (float)info.GetValue("PositionZ", typeof(float));
}
[SecurityPermission(SecurityAction.LinkDemand,
Flags = SecurityPermissionFlag.SerializationFormatter)]
public virtual void GetObjectData(
SerializationInfo info, StreamingContext context)
{
if (info == null) {
throw new System.ArgumentNullException("info");
}
info.AddValue("PositionX", positionX);
info.AddValue("PositionY", positionY);
info.AddValue("PositionZ", positionZ);
}
}