using System; using InABox.Core; using Newtonsoft.Json; namespace InABox.Serialization { public class JsonSerializer : ISerializer { public TType Deserialize(string data) // where TType : BaseObject, new() { var serializerSettings = new JsonSerializerSettings { DateParseHandling = DateParseHandling.DateTime, DateFormatHandling = DateFormatHandling.IsoDateFormat, DateTimeZoneHandling = DateTimeZoneHandling.RoundtripKind }; serializerSettings.Converters.Add(new DataTableJsonConverter()); //serializerSettings.Converters.Add(new DateTimeJsonConverter()); serializerSettings.Converters.Add(new FilterJsonConverter()); serializerSettings.Converters.Add(new ColumnJsonConverter()); serializerSettings.Converters.Add(new SortOrderJsonConverter()); serializerSettings.Converters.Add(new UserPropertiesJsonConverter()); var ret = default(TType); try { ret = JsonConvert.DeserializeObject(data, serializerSettings); } catch { if (typeof(TType).IsArray) { object o = Array.CreateInstance(typeof(TType).GetElementType(), 0); ret = (TType)o; } else { Activator.CreateInstance(); } } return ret; } public string Serialize(TType o) // where TType : BaseObject, new() { var serializerSettings = new JsonSerializerSettings { DateParseHandling = DateParseHandling.DateTime, DateFormatHandling = DateFormatHandling.IsoDateFormat, DateTimeZoneHandling = DateTimeZoneHandling.RoundtripKind }; serializerSettings.Converters.Add(new DataTableJsonConverter()); //serializerSettings.Converters.Add(new DateTimeJsonConverter()); serializerSettings.Converters.Add(new FilterJsonConverter()); serializerSettings.Converters.Add(new ColumnJsonConverter()); serializerSettings.Converters.Add(new SortOrderJsonConverter()); serializerSettings.Converters.Add(new UserPropertiesJsonConverter()); var json = JsonConvert.SerializeObject(o, Formatting.None, serializerSettings); return json; } } }