JsonSerializer.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. using System;
  2. using InABox.Core;
  3. using Newtonsoft.Json;
  4. namespace InABox.Serialization
  5. {
  6. public class JsonSerializer : ISerializer<string>
  7. {
  8. public TType Deserialize<TType>(string data) // where TType : BaseObject, new()
  9. {
  10. var serializerSettings = new JsonSerializerSettings
  11. {
  12. DateParseHandling = DateParseHandling.DateTime,
  13. DateFormatHandling = DateFormatHandling.IsoDateFormat,
  14. DateTimeZoneHandling = DateTimeZoneHandling.RoundtripKind
  15. };
  16. serializerSettings.Converters.Add(new DataTableJsonConverter());
  17. //serializerSettings.Converters.Add(new DateTimeJsonConverter());
  18. serializerSettings.Converters.Add(new FilterJsonConverter());
  19. serializerSettings.Converters.Add(new ColumnJsonConverter());
  20. serializerSettings.Converters.Add(new SortOrderJsonConverter());
  21. serializerSettings.Converters.Add(new UserPropertiesJsonConverter());
  22. var ret = default(TType);
  23. try
  24. {
  25. ret = JsonConvert.DeserializeObject<TType>(data, serializerSettings);
  26. }
  27. catch
  28. {
  29. if (typeof(TType).IsArray)
  30. {
  31. object o = Array.CreateInstance(typeof(TType).GetElementType(), 0);
  32. ret = (TType)o;
  33. }
  34. else
  35. {
  36. Activator.CreateInstance<TType>();
  37. }
  38. }
  39. return ret;
  40. }
  41. public string Serialize<TType>(TType o) // where TType : BaseObject, new()
  42. {
  43. var serializerSettings = new JsonSerializerSettings
  44. {
  45. DateParseHandling = DateParseHandling.DateTime,
  46. DateFormatHandling = DateFormatHandling.IsoDateFormat,
  47. DateTimeZoneHandling = DateTimeZoneHandling.RoundtripKind
  48. };
  49. serializerSettings.Converters.Add(new DataTableJsonConverter());
  50. //serializerSettings.Converters.Add(new DateTimeJsonConverter());
  51. serializerSettings.Converters.Add(new FilterJsonConverter());
  52. serializerSettings.Converters.Add(new ColumnJsonConverter());
  53. serializerSettings.Converters.Add(new SortOrderJsonConverter());
  54. serializerSettings.Converters.Add(new UserPropertiesJsonConverter());
  55. var json = JsonConvert.SerializeObject(o, Formatting.None, serializerSettings);
  56. return json;
  57. }
  58. }
  59. }