using UnityEngine;
using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
namespace Doofah
{
/// <summary>
/// Generic serialiser.
/// Serialises any struct or class marked with [System.Serializable]
/// </summary>
public class GenericSerialiser
{
public static BinaryFormatter bFormatter = new BinaryFormatter ();
public static void SaveToPlayerPrefs (string key, object objectToSerialise)
{
MemoryStream memoryStream = new MemoryStream ();
bFormatter.Serialize (memoryStream, objectToSerialise);
string str = System.Convert.ToBase64String (memoryStream.ToArray ());
PlayerPrefs.SetString ( key, str);
}
public static T LoadFromPlayerPrefs<T>(string key)
{
if (!PlayerPrefs.HasKey(key))
return default(T);
string data = PlayerPrefs.GetString(key);
MemoryStream stream = new MemoryStream(System.Convert.FromBase64String(data));
T deserializedObject = (T)bFormatter.Deserialize(stream);
return deserializedObject;
}
public static void SaveToBinaryFile(string fileName, object objectToSerialise)
{
MemoryStream memoryStream = new MemoryStream();
bFormatter.Serialize(memoryStream, objectToSerialise);
using (FileStream file = new FileStream(fileName, FileMode.Create, FileAccess.Write))
{
memoryStream.WriteTo(file);
}
}
public static T LoadFromBinaryFile<T>(string filename)
{
byte[] bytes;
using (FileStream file = new FileStream(filename, FileMode.Open, FileAccess.Read))
{
bytes = new byte[file.Length];
file.Read(bytes, 0, (int)file.Length);
}
MemoryStream stream = new MemoryStream(bytes, writable: false);
T deserializedObject = (T)bFormatter.Deserialize(stream);
return deserializedObject;
}
}
}