123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Linq;
- using InABox.Core;
- using Newtonsoft.Json;
- namespace InABox.Serialization
- {
- public class JsonSerializer : ISerializer<string>
- {
- public TType Deserialize<TType>(string data) // where TType : BaseObject, new()
- {
- var serializerSettings = new JsonSerializerSettings
- {
- DateParseHandling = DateParseHandling.DateTime,
- DateFormatHandling = DateFormatHandling.IsoDateFormat,
- DateTimeZoneHandling = DateTimeZoneHandling.RoundtripKind
- };
- serializerSettings.Converters.Add(new CoreTableJsonConverter());
- //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<TType>(data, serializerSettings);
- }
- catch
- {
- if (typeof(TType).IsArray)
- {
- ret = JsonConvert.DeserializeObject<TType>(data, serializerSettings);
- // JsonConvert.DeserializeObject<JArray>(data,)
- // var listtype = typeof(List<>).MakeGenericType(typeof(TType).GetElementType());
- // var list = JsonConvert.DeserializeObject(data, listtype, serializerSettings) as IList;
- // new ArrayList
- // ret = (TType)(list.To
- //object o = Array.CreateInstance(typeof(TType).GetElementType(), 0);
- //ret = (TType)o;
- }
- else
- {
- Activator.CreateInstance<TType>();
- }
- }
- return ret;
- }
- public string Serialize<TType>(TType o) // where TType : BaseObject, new()
- {
- var serializerSettings = new JsonSerializerSettings
- {
- DateParseHandling = DateParseHandling.DateTime,
- DateFormatHandling = DateFormatHandling.IsoDateFormat,
- DateTimeZoneHandling = DateTimeZoneHandling.RoundtripKind
- };
- serializerSettings.Converters.Add(new CoreTableJsonConverter());
- //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;
- }
- }
- }
|