JsonSerializer.cs 3.0 KB

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