using System; using FullSerializer; namespace Beyond { public class JSONSerializer { fsSerializer m_serializer; private static JSONSerializer s_instance; public static JSONSerializer Instance { get { if (s_instance != null) return s_instance; s_instance = new JSONSerializer(); s_instance.Initialize(); return s_instance; } } public void Initialize() { m_serializer = new fsSerializer(); // m_serializer.AddConverter(new PickupSetConverter()); } public void AddConverter(fsBaseConverter converter) { m_serializer.AddConverter((converter)); } public string Serialize(Type type, object value) { // serialize the data fsData data; m_serializer.TrySerialize(type, value, out data).AssertSuccessWithoutWarnings(); return fsJsonPrinter.PrettyJson(data); // emit the data via JSON //return fsJsonPrinter.CompressedJson(data); } public string Serialize( object value) { // serialize the data fsData data; m_serializer.TrySerialize(typeof(T), value, out data).AssertSuccessWithoutWarnings(); return fsJsonPrinter.PrettyJson(data); // emit the data via JSON //return fsJsonPrinter.CompressedJson(data); } public object Deserialize(Type type, string serializedState) { // step 1: parse the JSON data fsData data = fsJsonParser.Parse(serializedState); // step 2: deserialize the data object deserialized = null; m_serializer.TryDeserialize(data, type, ref deserialized).AssertSuccessWithoutWarnings(); return deserialized; } public T Deserialize(string serializedState) { // step 1: parse the JSON data fsData data = fsJsonParser.Parse(serializedState); // step 2: deserialize the data object deserialized = null; m_serializer.TryDeserialize(data, typeof(T), ref deserialized).AssertSuccessWithoutWarnings(); return (T)deserialized; } } }