1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Text;
- using MediaBrowser.Model.Services;
- namespace ServiceStack.Host
- {
- public class ContentTypes
- {
- public static ContentTypes Instance = new ContentTypes();
- public void SerializeToStream(IRequest req, object response, Stream responseStream)
- {
- var contentType = req.ResponseContentType;
- var serializer = GetResponseSerializer(contentType);
- if (serializer == null)
- throw new NotSupportedException("ContentType not supported: " + contentType);
- var httpRes = new HttpResponseStreamWrapper(responseStream, req)
- {
- Dto = req.Response.Dto
- };
- serializer(req, response, httpRes);
- }
- public Action<IRequest, object, IResponse> GetResponseSerializer(string contentType)
- {
- var serializer = GetStreamSerializer(contentType);
- if (serializer == null) return null;
- return (httpReq, dto, httpRes) => serializer(httpReq, dto, httpRes.OutputStream);
- }
- public Action<IRequest, object, Stream> GetStreamSerializer(string contentType)
- {
- switch (GetRealContentType(contentType))
- {
- case "application/xml":
- case "text/xml":
- case "text/xml; charset=utf-8": //"text/xml; charset=utf-8" also matches xml
- return (r, o, s) => ServiceStackHost.Instance.SerializeToXml(o, s);
- case "application/json":
- case "text/json":
- return (r, o, s) => ServiceStackHost.Instance.SerializeToJson(o, s);
- }
- return null;
- }
- public Func<Type, Stream, object> GetStreamDeserializer(string contentType)
- {
- switch (GetRealContentType(contentType))
- {
- case "application/xml":
- case "text/xml":
- case "text/xml; charset=utf-8": //"text/xml; charset=utf-8" also matches xml
- return ServiceStackHost.Instance.DeserializeXml;
- case "application/json":
- case "text/json":
- return ServiceStackHost.Instance.DeserializeJson;
- }
- return null;
- }
- private static string GetRealContentType(string contentType)
- {
- return contentType == null
- ? null
- : contentType.Split(';')[0].ToLower().Trim();
- }
- }
- }
|