我尝试从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
我更喜欢第一种可能性。