JsonDotNetEncoder.cs 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. #if !BESTHTTP_DISABLE_SIGNALR_CORE && BESTHTTP_SIGNALR_CORE_ENABLE_NEWTONSOFT_JSON_DOTNET_ENCODER
  2. using System;
  3. using BestHTTP.PlatformSupport.Memory;
  4. namespace BestHTTP.SignalRCore.Encoders
  5. {
  6. public sealed class JsonDotNetEncoder : BestHTTP.SignalRCore.IEncoder
  7. {
  8. public object ConvertTo(Type toType, object obj)
  9. {
  10. string json = Newtonsoft.Json.JsonConvert.SerializeObject(obj);
  11. return Newtonsoft.Json.JsonConvert.DeserializeObject(json, toType);
  12. }
  13. public T DecodeAs<T>(BufferSegment buffer)
  14. {
  15. using (var reader = new System.IO.StreamReader(new System.IO.MemoryStream(buffer.Data, buffer.Offset, buffer.Count)))
  16. using (var jsonReader = new Newtonsoft.Json.JsonTextReader(reader))
  17. return new Newtonsoft.Json.JsonSerializer().Deserialize<T>(jsonReader);
  18. }
  19. public BufferSegment Encode<T>(T value)
  20. {
  21. var json = Newtonsoft.Json.JsonConvert.SerializeObject(value);
  22. int len = System.Text.Encoding.UTF8.GetByteCount(json);
  23. byte[] buffer = BufferPool.Get(len + 1, true);
  24. System.Text.Encoding.UTF8.GetBytes(json, 0, json.Length, buffer, 0);
  25. buffer[len] = 0x1e;
  26. return new BufferSegment(buffer, 0, len + 1);
  27. }
  28. }
  29. }
  30. #endif