ASP.NET MVC JsonResult日期格式与驼峰命名法解决方案

5星 · 超过95%的资源 5 下载量 25 浏览量 更新于2024-08-30 收藏 52KB PDF 举报
ASP.NET MVC开发过程中,可能会遇到两个主要问题:一是JsonResult返回的日期类型数据格式不友好,二是C#对象属性名称在转化为JSON时默认遵循“帕斯卡命名法”,而非前端常用的“驼峰命名法”。本文将提供解决方案。 DateTime类型数据格式问题: 在ASP.NET MVC中,当控制器返回JsonResult时,日期类型数据通常会以Date(数字)的格式呈现,这在前端解析时可能会带来不便。为了解决这个问题,可以引入第三方库Newtonsoft.Json,通过自定义JsonResult子类来改变日期格式。首先,通过NuGet包管理器安装Newtonsoft.Json: ``` Install-Package Newtonsoft.Json ``` 然后,创建一个新的JsonResult类,如JsonNetResult,将内部的序列化工作交给Newtonsoft.Json,并设定日期格式为"yyyy-MM-dd HH:mm:ss",如下所示: ```csharp public class JsonNetResult : JsonResult { public JsonNetResult(object data) : this(data, JsonRequestBehavior.DenyGet) { } public JsonNetResult(object data, JsonRequestBehavior jsonRequestBehavior) { this.Data = data; this.JsonRequestBehavior = jsonRequestBehavior; // 使用Newtonsoft.Json进行序列化,并设置日期格式 JsonSerializerSettings settings = new JsonSerializerSettings(); settings.DateFormatString = "yyyy-MM-dd HH:mm:ss"; this.ContentType = "application/json"; this.ContentEncoding = Encoding.UTF8; this.Data = JsonConvert.SerializeObject(data, settings); } } ``` 现在,当你需要返回JsonResult时,使用这个新的JsonNetResult,日期将以指定的格式传递给前端。 C#对象属性名称转换成“驼峰命名法”: C#标准推荐使用“帕斯卡命名法”(首字母大写)来命名属性,但前端开发者通常习惯于“驼峰命名法”(首字母小写)。为实现这一转换,同样可以在自定义JsonResult中处理,这次利用Newtonsoft.Json的ContractResolver特性: ```csharp public class CamelCasePropertyNamesContractResolver : DefaultContractResolver { protected override string ResolvePropertyName(string propertyName) { return char.ToLower(propertyName[0]) + propertyName.Substring(1); } } public class JsonNetResult : JsonResult { // ... 其他代码 ... // 添加 ContractResolver 设置 JsonSerializerSettings settings = new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver(), DateFormatString = "yyyy-MM-dd HH:mm:ss" }; this.Data = JsonConvert.SerializeObject(data, settings); } ``` 通过创建`CamelCasePropertyNamesContractResolver`类,我们可以自定义属性名称的转换规则,使JSON序列化时自动将帕斯卡命名法转换为驼峰命名法。 总结: 1. 解决日期格式问题,可以创建自定义的JsonResult(如JsonNetResult),利用Newtonsoft.Json库设置日期格式。 2. 将C#对象属性名转换为“驼峰命名法”,可以通过自定义ContractResolver并集成到JsonResult中实现。 3. 通过这两个自定义策略,你可以确保ASP.NET MVC返回的JSON数据既符合前端预期的日期格式,又具有合适的属性命名风格。