protected virtual void OnRender(IHttpContext context, object value)
{
if (_returnType == typeof(void)) return;
IViewTemplate template = value as IViewTemplate;
if (template != null)
{
IView view = context.ViewFactory != null ? context.ViewFactory.FindView(template) : null;
if (view != null)
value = view;
else if (!(template is IRenderable))
value = MockViewFactory.CreateView(template);
}
IRenderable renderable = value as IRenderable;
if (renderable != null)
{
renderable.Render(context);
return;
}
Stream stream = value as Stream;
if (stream != null)
{
WriteStream(stream, context.Response);
return;
}
string requestType = context.Request.ContentType;
if (IsJson(ResponseType) || (ResponseType == null && (IsJson(requestType) || "JSON".Equals(context.Request.Headers["X-Request"], StringComparison.InvariantCultureIgnoreCase) || AcceptJsonBeforeXml(context.Request.AcceptTypes))))
{
if (ResponseType == null) context.Response.ContentType = "application/json";
if (value == null) context.Response.Write("null");
else
{
context.Response.Charset = context.Response.ContentEncoding.WebName;
StringBuilder sb = new StringBuilder();
JavaScriptSerializer serializer = new JavaScriptSerializer();
serializer.Serialize(value, sb);
context.Response.Write(sb.ToString());
}
}
/*if (IsJson(ResponseType) || (ResponseType == null && (IsJson(requestType) || "JSON".Equals(context.Request.Headers["X-Request"], StringComparison.InvariantCultureIgnoreCase) || AcceptJsonBeforeXml(context.Request.AcceptTypes))))
{
if (ResponseType == null) context.Response.ContentType = "application/json";
if (value == null && _returnType == null) context.Response.Write("null");
else
{
context.Response.Charset = context.Response.ContentEncoding.WebName;
using (var writer = JsonReaderWriterFactory.CreateJsonWriter(context.Response.OutputStream, context.Response.ContentEncoding))
{
var serializer = new DataContractJsonSerializer(value == null ? _returnType : value.GetType());
serializer.WriteObject(writer, value);
}
}
}
else if (ResponseType == null || IsXml(ResponseType))
{
if (ResponseType == null) context.Response.ContentType = "application/xml";
if (value != null || _returnType != null)
using (var writer = System.Xml.XmlWriter.Create(context.Response.Output))
{
var xmlnode = value as XmlNode;
if (xmlnode != null)
xmlnode.WriteTo(writer);
else
{
var xnode = value as XNode;
if (xnode != null)
xnode.WriteTo(writer);
else
{
var serializer = new DataContractSerializer(value == null ? _returnType : value.GetType());
serializer.WriteObject(writer, value);
}
}
}
}*/
}