如何以ISO格式从MVC4控制器返回json日期

时间:2013-11-17 20:37:44

标签: asp.net-mvc json asp.net-mvc-4 serialization json.net

我使用ASP.NET MVC4控制器中的Json.Net尝试了ISO格式的tro返回日期

public JsonResult Sales() {
  var saleList = new List<Sale>();

  ... 
        var str = JsonConvert.SerializeObject(saleList);
        return Json(str, JsonRequestBehavior.AllowGet);
        }

public class Sale
{
    public DateTime saledate { get; set; }
    ...
}

但它将整个对象json表示法返回为单个字符串。

如何以ISO格式返回日期作为json对象?

2 个答案:

答案 0 :(得分:1)

您可以使用ServiceStack JSON serializer执行此操作,但首先必须将其集成到ASP.NET MVC。

安装软件包后,在应用程序启动时配置DateTime序列化:

JsConfig.DateHandler = JsonDateHandler.ISO8601;

为JSON内容创建ActionResult类型:

public class CustomJsonResult : ActionResult
{
    private readonly object _data;
    private readonly string _content;
    private readonly Encoding _encoding;

    public CustomJsonResult(object data) : this(data, null, null) { }

    public CustomJsonResult(object data, string content) : this(data, content, null) { }

    public CustomJsonResult(object data, Encoding encoding) : this(data, null, encoding) { }

    public CustomJsonResult(object data, string content, Encoding encoding)
    {
        _data = data;
        _content = content;
        _encoding = encoding;
    }

    public override void ExecuteResult(ControllerContext context)
    {
        if (context == null)
        {
            throw new ArgumentNullException("context");
        }
        HttpResponseBase response = context.HttpContext.Response;
        response.ContentType = string.IsNullOrEmpty(_content) ? "application/json" : _content;

        if (_encoding != null)
        {
            response.ContentEncoding = _encoding;
        }

        response.Write(JsonSerializer.SerializeToString(_data));
    }
}

然后您可以将这些方法添加到基本控制器:

protected CustomJsonResult CustomJson(object data)
{
    return new CustomJsonResult(data);
}

protected CustomJsonResult CustomJson(object data, string content)
{
    return new CustomJsonResult(data, content);
}

protected CustomJsonResult CustomJson(object data, Encoding encoding)
{
    return new CustomJsonResult(data, encoding);
}

protected CustomJsonResult CustomJson(object data, string content, Encoding encoding)
{
    return new CustomJsonResult(data, content, encoding);
}

最后你可以像这样返回结果:

return CustomJson(saleList);

答案 1 :(得分:0)

使用带有JsonSerializerSettings参数的SerializeObject的重载时,可以设置设置:

public static string SerializeObject(
    Object value,
    JsonSerializerSettings settings
)

JsonSerializerSettings有一个名为DateFormatHandling的属性,用于区分Microsoft格式和ISO格式。

您还可以在JSON.NET中使用自定义转换器。可以使用CustomConverter属性应用自定义转换器。

可以在JSON.NET文档中找到一个示例:http://james.newtonking.com/json/help/index.html

我更喜欢第一种可能性。