using System.IO; using System.Text; using System.Web.Script.Serialization; using System.Web.Mvc; using System.Xml.Serialization; namespace View_Engine_Demo { public class SerializableViewEngine : IViewEngine { public void RenderView(ViewContext viewContext) { string method = viewContext.RouteData.Values["responseType"] as string; string serializedData = string.Empty; switch (method.ToLowerInvariant()) { case "json": serializedData = SerializeToJson(viewContext.ViewData); break; case "xml": serializedData = SerializeToXml(viewContext.ViewData); break; } viewContext.HttpContext.Response.Clear(); viewContext.HttpContext.Response.Write(serializedData); } protected static string SerializeToJson(object o) { return new JavaScriptSerializer().Serialize(o); } protected static string SerializeToXml(object o) { StringBuilder sb = new StringBuilder(); using (TextWriter writer = new StringWriter(sb)) { new XmlSerializer(o.GetType()).Serialize(writer, o); } return sb.ToString(); } } }