LitJsonEncoder.cs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #if !BESTHTTP_DISABLE_SIGNALR_CORE && !BESTHTTP_DISABLE_WEBSOCKET
  2. using System;
  3. namespace BestHTTP.SignalRCore.Encoders
  4. {
  5. public sealed class LitJsonEncoder : BestHTTP.SignalRCore.IEncoder
  6. {
  7. public string Name { get { return "json"; } }
  8. public LitJsonEncoder()
  9. {
  10. LitJson.JsonMapper.RegisterImporter<int, long>((input) => input);
  11. LitJson.JsonMapper.RegisterImporter<long, int>((input) => (int)input);
  12. LitJson.JsonMapper.RegisterImporter<double, int>((input) => (int)(input + 0.5));
  13. LitJson.JsonMapper.RegisterImporter<string, DateTime>((input) => Convert.ToDateTime((string)input).ToUniversalTime());
  14. LitJson.JsonMapper.RegisterImporter<double, float>((input) => (float)input);
  15. LitJson.JsonMapper.RegisterImporter<string, byte[]>((input) => Convert.FromBase64String(input));
  16. }
  17. public T DecodeAs<T>(string text)
  18. {
  19. return LitJson.JsonMapper.ToObject<T>(text);
  20. }
  21. public T DecodeAs<T>(byte[] data)
  22. {
  23. throw new NotImplementedException();
  24. }
  25. public byte[] EncodeAsBinary<T>(T value)
  26. {
  27. throw new NotImplementedException();
  28. }
  29. public string EncodeAsText<T>(T value)
  30. {
  31. return LitJson.JsonMapper.ToJson(value);
  32. }
  33. public object ConvertTo(Type toType, object obj)
  34. {
  35. string json = LitJson.JsonMapper.ToJson(obj);
  36. return LitJson.JsonMapper.ToObject(toType, json);
  37. }
  38. }
  39. }
  40. #endif