ContentTypes.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Text;
  5. using MediaBrowser.Model.Services;
  6. namespace ServiceStack.Host
  7. {
  8. public class ContentTypes
  9. {
  10. public static ContentTypes Instance = new ContentTypes();
  11. public void SerializeToStream(IRequest req, object response, Stream responseStream)
  12. {
  13. var contentType = req.ResponseContentType;
  14. var serializer = GetStreamSerializer(contentType);
  15. serializer(response, responseStream);
  16. }
  17. public static Action<object, Stream> GetStreamSerializer(string contentType)
  18. {
  19. switch (GetRealContentType(contentType))
  20. {
  21. case "application/xml":
  22. case "text/xml":
  23. case "text/xml; charset=utf-8": //"text/xml; charset=utf-8" also matches xml
  24. return (o, s) => ServiceStackHost.Instance.SerializeToXml(o, s);
  25. case "application/json":
  26. case "text/json":
  27. return (o, s) => ServiceStackHost.Instance.SerializeToJson(o, s);
  28. }
  29. return null;
  30. }
  31. public Func<Type, Stream, object> GetStreamDeserializer(string contentType)
  32. {
  33. switch (GetRealContentType(contentType))
  34. {
  35. case "application/xml":
  36. case "text/xml":
  37. case "text/xml; charset=utf-8": //"text/xml; charset=utf-8" also matches xml
  38. return ServiceStackHost.Instance.DeserializeXml;
  39. case "application/json":
  40. case "text/json":
  41. return ServiceStackHost.Instance.DeserializeJson;
  42. }
  43. return null;
  44. }
  45. private static string GetRealContentType(string contentType)
  46. {
  47. return contentType == null
  48. ? null
  49. : contentType.Split(';')[0].ToLower().Trim();
  50. }
  51. }
  52. }