BaseSerializationHandler.cs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. using System.IO;
  2. using System.Threading.Tasks;
  3. using MediaBrowser.Common.Serialization;
  4. using System;
  5. namespace MediaBrowser.Common.Net.Handlers
  6. {
  7. public abstract class BaseJsonHandler<T> : BaseHandler
  8. {
  9. public SerializationFormat SerializationFormat
  10. {
  11. get
  12. {
  13. string format = QueryString["dataformat"];
  14. if (string.IsNullOrEmpty(format))
  15. {
  16. return Handlers.SerializationFormat.Json;
  17. }
  18. return (SerializationFormat)Enum.Parse(typeof(SerializationFormat), format, true);
  19. }
  20. }
  21. public override Task<string> GetContentType()
  22. {
  23. switch (SerializationFormat)
  24. {
  25. case Handlers.SerializationFormat.Jsv:
  26. return Task.FromResult<string>("text/plain");
  27. default:
  28. return Task.FromResult<string>(MimeTypes.JsonMimeType);
  29. }
  30. }
  31. private bool _ObjectToSerializeEnsured = false;
  32. private T _ObjectToSerialize;
  33. private async Task EnsureObjectToSerialize()
  34. {
  35. if (!_ObjectToSerializeEnsured)
  36. {
  37. _ObjectToSerialize = await GetObjectToSerialize().ConfigureAwait(false);
  38. if (_ObjectToSerialize == null)
  39. {
  40. StatusCode = 404;
  41. }
  42. _ObjectToSerializeEnsured = true;
  43. }
  44. }
  45. protected abstract Task<T> GetObjectToSerialize();
  46. protected override Task PrepareResponse()
  47. {
  48. return EnsureObjectToSerialize();
  49. }
  50. protected async override Task WriteResponseToOutputStream(Stream stream)
  51. {
  52. await EnsureObjectToSerialize();
  53. switch (SerializationFormat)
  54. {
  55. case Handlers.SerializationFormat.Jsv:
  56. JsvSerializer.SerializeToStream<T>(_ObjectToSerialize, stream);
  57. break;
  58. default:
  59. JsonSerializer.SerializeToStream<T>(_ObjectToSerialize, stream);
  60. break;
  61. }
  62. }
  63. }
  64. public enum SerializationFormat
  65. {
  66. Json,
  67. Jsv
  68. }
  69. }