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



我尝试从ASP.Net MVC4控制器使用Json.Net以ISO格式返回日期

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对象返回?

您可以使用ServiceStack JSON序列化程序来完成此操作,但首先必须将其集成到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);

您可以在对SerializeObject使用重载时设置设置,该重载采用JsonSerializerSettings参数:

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

我更喜欢第一种可能性。

相关内容

  • 没有找到相关文章

最新更新