Skip to content

Instantly share code, notes, and snippets.

@mmhantea
Forked from Lionhunter3k/gist:928d51b732b0a2fbc3ee
Last active August 29, 2015 14:21
Show Gist options
  • Select an option

  • Save mmhantea/aaec18270eaf48b74bd3 to your computer and use it in GitHub Desktop.

Select an option

Save mmhantea/aaec18270eaf48b74bd3 to your computer and use it in GitHub Desktop.

Revisions

  1. @Lionhunter3k Lionhunter3k created this gist May 15, 2015.
    125 changes: 125 additions & 0 deletions gistfile1.cs
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,125 @@
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Web;
    using System.Web.Mvc;
    using Humanizer;
    using Newtonsoft.Json;
    using Newtonsoft.Json.Converters;

    namespace Mvc
    {
    public class JSONCustomDateConverter : DateTimeConverterBase
    {
    private TimeZoneInfo _timeZoneInfo;
    private string _dateFormat;

    public JSONCustomDateConverter(string dateFormat, TimeZoneInfo timeZoneInfo)
    {
    _dateFormat = dateFormat;
    _timeZoneInfo = timeZoneInfo;
    }

    public JSONCustomDateConverter(string dateFormat)
    {
    _dateFormat = dateFormat;
    }

    public override bool CanConvert(Type objectType)
    {
    return objectType == typeof(DateTime) || objectType == typeof(Nullable<DateTime>);
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
    throw new NotImplementedException();
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
    if (this._timeZoneInfo != null)
    {
    writer.WriteValue(TimeZoneInfo.ConvertTimeFromUtc(Convert.ToDateTime(value), _timeZoneInfo).ToString(_dateFormat));
    }
    else
    {
    writer.WriteValue(Convert.ToDateTime(value).ToString(this._dateFormat));
    }
    writer.Flush();
    }
    }

    public class PrettyEnumStrings : StringEnumConverter
    {
    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
    if (value is Enum)
    {
    writer.WriteValue((value as Enum).Humanize());
    writer.Flush();
    }
    else
    base.WriteJson(writer, value, serializer);
    }
    }

    public class JsonNetResult : JsonResult
    {
    public JsonNetResult(object model)
    : base()
    {
    base.Data = model;
    base.JsonRequestBehavior = System.Web.Mvc.JsonRequestBehavior.AllowGet;
    SerializerSettings = new JsonSerializerSettings() { DateFormatHandling = Newtonsoft.Json.DateFormatHandling.IsoDateFormat };
    Formatting = Newtonsoft.Json.Formatting.Indented;
    }

    public JsonNetResult(object model, bool prettyDateTime = false, bool enumAsString = false, bool? prettyEnums = null)
    : base()
    {
    base.Data = model;
    base.JsonRequestBehavior = System.Web.Mvc.JsonRequestBehavior.AllowGet;
    if (prettyDateTime)
    SerializerSettings = new JsonSerializerSettings() { Converters = new List<JsonConverter>() { new JSONCustomDateConverter("dd.MM.yyyy") } };
    else
    SerializerSettings = new JsonSerializerSettings() { DateFormatHandling = Newtonsoft.Json.DateFormatHandling.IsoDateFormat };
    Formatting = Newtonsoft.Json.Formatting.Indented;
    if (enumAsString)
    if (prettyEnums.HasValue && prettyEnums.Value)
    this.SerializerSettings.Converters.Add(new PrettyEnumStrings());
    else
    this.SerializerSettings.Converters.Add(new Newtonsoft.Json.Converters.StringEnumConverter());
    }

    public HttpStatusCode? StatusCode { get; set; }

    public JsonSerializerSettings SerializerSettings { get; set; }

    public Formatting Formatting { get; set; }

    public override void ExecuteResult(ControllerContext context)
    {
    if (context == null)
    throw new ArgumentNullException("context");
    HttpResponseBase response = context.HttpContext.Response;
    response.ContentType = !string.IsNullOrEmpty(ContentType)
    ? ContentType
    : "application/json";
    if (ContentEncoding != null)
    response.ContentEncoding = ContentEncoding;
    if (StatusCode.HasValue)
    {
    response.StatusCode = (int)StatusCode.Value;
    response.TrySkipIisCustomErrors = true;
    }
    if (Data != null)
    {
    JsonTextWriter writer = new JsonTextWriter(response.Output) { Formatting = Formatting };
    JsonSerializer serializer = JsonSerializer.Create(SerializerSettings);
    serializer.Serialize(writer, Data);
    writer.Flush();
    }
    }
    }
    }