即使转换为ISO,JSON日期仍为Microsoft格式

即使转换为ISO,JSON日期仍为Microsoft格式,json,asp.net-mvc,Json,Asp.net Mvc,我正在编写一个示例GET方法来从本地数据库返回数据。我首先将其序列化为字符串,以便将日期转换为ISO格式。但当我反序列化它时,它会返回到Microsoft格式。我不知道我做错了什么 感谢您的帮助 public class SalesOrderHeaderController : Controller { // // GET: /SalesOrderHeader/ public ActionResult Index() { return View(

我正在编写一个示例GET方法来从本地数据库返回数据。我首先将其序列化为字符串,以便将日期转换为ISO格式。但当我反序列化它时,它会返回到Microsoft格式。我不知道我做错了什么

感谢您的帮助

public class SalesOrderHeaderController : Controller
{
    //
    // GET: /SalesOrderHeader/

    public ActionResult Index()
    {
        return View();
    }

    [HttpGet]
    public ActionResult GetHeaders(string id)
    {

        var obj = DBHelpers.ExecuteQuery<SalesOrderHeader>(string.Format("select * from sales_order_hdr where sales_order_id = '{0}'", id));

            JsonSerializerSettings microsoftDateFormatSettings = new JsonSerializerSettings
                {
                    DateFormatHandling = DateFormatHandling.IsoDateFormat
                };

            string json = JsonConvert.SerializeObject(obj, microsoftDateFormatSettings);
            ResponseObject res = new ResponseObject()
                {
                    Code = "200",
                    Data = JsonConvert.DeserializeObject<List<SalesOrderHeader>>(json, microsoftDateFormatSettings)
                };

            return Json(res, JsonRequestBehavior.AllowGet);

    }

}

class ResponseObject
{
    public string Code { get; set; }
    public object Data { get; set; }
}
公共类SalesOrderHeaderController:控制器
{
//
//获取:/salesforderheader/
公共行动结果索引()
{
返回视图();
}
[HttpGet]
public ActionResult GetHeaders(字符串id)
{
var obj=DBHelpers.ExecuteQuery(string.Format(“select*from sales_order_hdr,其中sales_order_id='{0}',id));
JsonSerializerSettings microsoftDateFormatSettings=新JsonSerializerSettings
{
DateFormatHandling=DateFormatHandling.IsoDateFormat
};
string json=JsonConvert.SerializeObject(obj,microsoftDateFormatSettings);
ResponseObject res=新的ResponseObject()
{
Code=“200”,
Data=JsonConvert.DeserializeObject(json,microsoftDateFormatSettings)
};
返回Json(res,JsonRequestBehavior.AllowGet);
}
}
类响应对象
{
公共字符串代码{get;set;}
公共对象数据{get;set;}
}

我实现了一个自定义ActionResult类,覆盖了ExecuteSult方法。然后在方法上,进行转换并将其写入HttpResponseBase对象


From:-易腐Dave的答案

但当我反序列化它时,它会返回到Microsoft格式
我不明白这是什么意思-当你反序列化时,你把一个字符串变成了一个对象,其中DateTime是DateTime,在这个表示中没有不同日期格式的概念。那么你能用一个例子来解释吗?@TomW下面是一个回复返回日期的例子/日期(1492311600000)/。不应该是这样。如果使用特定设置序列化,然后反序列化到SalesOrderHeader对象列表(使用常规DateTime值),然后通过再次反序列化让响应将其再次序列化为json(无特定设置),那么序列化时所做的一切都将丢失。您将其重新转换为日期对象,因此下次在没有自定义设置的情况下序列化时,它会查看日期对象,看到日期对象,并以正常方式序列化。它不知道您之前对它进行了不同的序列化,因为您立即再次将其返回,并且DateTime对象中没有存储关于该事件的任何信息。这是MVC的旧版本吗?较新的版本不会生成此日期格式。这意味着您的实际问题一开始就错了。自版本4.5以来,Json.NET默认使用ISO格式。现在是第11版。正如其他人所解释的,您根本没有使用JSON.NET—通过将实际对象而不是JSON字符串传递到
JSON()
您使用的是过时的JavaScriptSerializer