ABP入门系列之Json格式化用法介绍 PHP中文网 • 2025年3月3日 14:53:13 • 编程技术 • 阅读 2 ,JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。本文重点给大家介绍ABP入门系列之Json格式化,需要的朋友可以参考下 讲完了分页功能,这一节我们先不急着实现新的功能。来简要介绍下Abp中Json的用法。为什么要在这一节讲呢?当然是做铺垫啊,后面的系列文章会经常和Json这个东西打交道。 一、Json是干什么的 JSON(Javascript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, Javascript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。 Json一般用于表示: 名称/值对: {"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"} 登录后复制 数组: { "people":[ {"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"}, {"firstName":"Jason","lastName":"Hunter","email":"bbbb"}, {"firstName":"Elliotte","lastName":"Harold","email":"cccc"} ]} 登录后复制 二、Asp.net Mvc中的JsonResult Asp.net mvc中默认提供了JsonResult来处理需要返回Json格式数据的情况。 一般我们可以这样使用: public ActionResult Movies(){ var movies = new List(); movies.Add(new { Title = "Ghostbusters", Genre = "Comedy", ReleaseDate = new DateTime(2017,1,1) }); movies.Add(new { Title = "Gone with Wind", Genre = "Drama", ReleaseDate = new DateTime(2017, 1, 3) }); movies.Add(new { Title = "Star Wars", Genre = "Science Fiction", ReleaseDate = new DateTime(2017, 1, 23) }); return Json(movies, JsonRequestBehavior.AllowGet);} 登录后复制 其中Json()是Controller基类中提供的虚方法。 返回的json结果格式化后为: [ { "Title": "Ghostbusters", "Genre": "Comedy", "ReleaseDate": "/Date(1483200000000)/" }, { "Title": "Gone with Wind", "Genre": "Drama", "ReleaseDate": "/Date(1483372800000)/" }, { "Title": "Star Wars", "Genre": "Science Fiction", "ReleaseDate": "/Date(1485100800000)/" }] 登录后复制 仔细观察返回的json结果,有以下几点不足: 返回的字段大小写与代码中一致。这就要求我们在前端中也要与代码中用一致的大小写进行取值(item.Title,item.Genre,item.ReleaseDate)。 不包含成功失败信息:如果我们要判断请求是否成功,我们要手动通过获取json数据包的length获取。 返回的日期未格式化,在前端还需自行格式化输出。 三、Abp中对Json的封装 所以Abp封装了AbpJsonResult继承于JsonResult,其中主要添加了两个属性: CamelCase:大小驼峰(默认为true,即小驼峰格式) Indented :是否缩进(默认为false,即未格式化) 并在AbpController中重载了Controller的Json()方法,强制所有返回的Json格式数据为AbpJsonResult类型,并提供了AbpJson()的虚方法。 /// /// Json the specified data, contentType, contentEncoding and behavior./// /// Data./// Content type./// Content encoding./// Behavior.protected override JsonResult Json(object data, string contentType, Encoding contentEncoding, JsonRequestBehavior behavior){ if (_wrapResultAttribute != null && !_wrapResultAttribute.WrapOnSuccess) { return base.Json(data, contentType, contentEncoding, behavior); } return AbpJson(data, contentType, contentEncoding, behavior);}protected virtual AbpJsonResult AbpJson( object data, string contentType = null, Encoding contentEncoding = null, JsonRequestBehavior behavior = JsonRequestBehavior.DenyGet, bool wrapResult = true, bool camelCase = true, bool indented = false){ if (wrapResult) { if (data == null) { data = new AjaxResponse(); } else if (!(data is AjaxResponseBase)) { data = new AjaxResponse(data); } } return new AbpJsonResult { Data = data, ContentType = contentType, ContentEncoding = contentEncoding, JsonRequestBehavior = behavior, CamelCase = camelCase, Indented = indented };} 登录后复制 在ABP中用Controler继承自AbpController,直接使用return Json(),将返回Json结果格式化后: { "result": [ { "title": "Ghostbusters", "genre": "Comedy", "releaseDate": "2017-01-01T00:00:00" }, { "title": "Gone with Wind", "genre": "Drama", "releaseDate": "2017-01-03T00:00:00" }, { "title": "Star Wars", "genre": "Science Fiction", "releaseDate": "2017-01-23T00:00:00" } ], "targetUrl": null, "success": true, "error": null, "unAuthorizedRequest": false, "abp": true} 登录后复制 其中result为代码中指定返回的数据。其他几个键值对是ABP封装的,包含了是否认证、是否成功、错误信息,以及目标Url。这几个参数是不是很sweet。 也可以通过调用return AbpJson()来指定参数进行json格式化输出。 仔细观察会发现日期格式还是怪怪的。2017-01-23T00:00:00,多了一个T。查看AbpJsonReult源码发现调用的是Newtonsoft.Json序列化组件中的JsonConvert.SerializeObject(obj, settings);进行序列化。 查看Newtonsoft.Json官网介绍,日期格式化输出,需要指定IsoDateTimeConverter的DateTimeFormat即可。 IsoDateTimeConverter timeFormat = new IsoDateTimeConverter(); timeFormat.DateTimeFormat = "yyyy-MM-dd HH:mm:ss";JsonConvert.SerializeObject(dt, Formatting.Indented, timeFormat) 登录后复制 那在我们Abp中我们怎么去指定这个DateTimeFormat呢? ABP中提供了AbpDateTimeConverter类继承自IsoDateTimeConverter。 但查看ABP中集成的Json序列化扩展类: public static class JsonExtensions { /// Converts given object to JSON string. /// public static string ToJsonString(this object obj, bool camelCase = false, bool indented = false) { JsonSerializerSettings settings = new JsonSerializerSettings(); if (camelCase) settings.ContractResolver = (IContractResolver) new CamelCasePropertyNamesContractResolver(); if (indented) settings.Formatting = Formatting.Indented; settings.Converters.Insert(0, (JsonConverter) new AbpDateTimeConverter()); return JsonConvert.SerializeObject(obj, settings); } } 登录后复制 明显没有指定DateTimeFormat,那我们就只能自己动手了,具体代码请参考4种解决json日期格式问题的办法的第四种办法。 当有异常发生时,Abp返回的Json格式化输出以下结果: { "targetUrl": null, "result": null, "success": false, "error": { "message": "An internal error occured during your request!", "details": "..." }, "unAuthorizedRequest": false} 登录后复制 当不需要abp对json进行封装包裹怎么办? 简单。只需要在方法上标记[DontWrapResult]特性即可。这个特性其实是一个快捷方式用来告诉ABP不要用AbpJsonResult包裹我,看源码就明白了: namespace Abp.Web.Models{ [AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface | AttributeTargets.Method)] public class DontWrapResultAttribute : WrapResultAttribute { /// /// Initializes a new instance of the class. /// public DontWrapResultAttribute() : base(false, false) { } } /// /// Used to determine how ABP should wrap response on the web layer. /// [AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface | AttributeTargets.Method)] public class WrapResultAttribute : Attribute { /// /// Wrap result on success. /// public bool WrapOnSuccess { get; set; } /// /// Wrap result on error. /// public bool WrapOnError { get; set; } /// /// Log errors. /// Default: true. /// public bool LogError { get; set; } /// /// Initializes a new instance of the class. /// /// Wrap result on success. /// Wrap result on error. public WrapResultAttribute(bool wrapOnSuccess = true, bool wrapOnError = true) { WrapOnSuccess = wrapOnSuccess; WrapOnError = wrapOnError; LogError = true; } }} 登录后复制 在AbpResultFilter和AbpExceptionFilter过滤器中会根据WrapResultAttribute、DontWrapResultAttribute特性进行相应的过滤。 四、Json日期格式化 第一种办法:前端JS转换: //格式化显示json日期格式 function showDate(jsonDate) { var date = new Date(jsonDate); var formatDate = date.toDateString(); return formatDate; } 登录后复制 第二种办法:在Abp的WepApiModule(模块)中指定JsonFormatter的时间序列化时间格式。 GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.DateFormatString ="yyyy-MM-dd HH:mm:ss"; 登录后复制 PS:这种方法仅对WebApi有效。 总结 本节主要讲解了以下几个问题: Asp.net中JsonResult的实现。 ABP对JsonResult的再封装,支持指定大小驼峰及是否缩进进行Json格式化。 如何对DateTime类型对象进行格式化输出。 Web层通过拓展AbpJsonResult,指定时间格式。 前端,通过将Json日期转换为js的Date类型,再格式化输出。 WebApi,通过在Moduel中指定DateFormatString。 以上就是ABP入门系列之Json格式化用法介绍的详细内容,更多请关注【创想鸟】其它相关文章! 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。 发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2445095.html abpabp入门系列json 赞 (0) 0 0 生成海报 微信扫码分享 关于作者 PHP中文网签约作者 关注私信 342.1K 文章 0 评论 1 粉丝 php中文网提供大量免费、原创、高清的php视频教程,并定期举行公益php培训!可边学习边在线修改示例代码,查看执行效果!php从入门到精通,一站式php自学平台! 图文详解ASP.NET百度Ueditor编辑器实现上传图片添加水印效果实例 上一篇 2025年3月3日 14:51:56 图像水印汉字变框是什么原因?如何解决? 下一篇 2025年2月17日 23:25:16 AD推荐 黄金广告位招租... 更多推荐 相关推荐 ASP.NET MVC 遇到JSON循环调用的问题应该怎么解决? 1..net开源json序列化工具newtonsoft.json中提供了解决序列化的循环引用问题: 方式1:指定Json序列化配置为 ReferenceLoopHandling.Ignore 方式2:指定 JsonIgnore忽略 引用对象… PHP中文网 2025年3月3日 • 编程技术 2000 让WebAPI 返回JSON格式的数据实例教程 在restful风格盛行的年代,对接接口大多数人会选择使用json,xml和json的对比传送(),看看这位博主是怎么说的,虽然最后没有说完,我想大概也能略微解决心中的疑惑。 1.其实要想让WebAPI 返回JSON格式的数据很简单,只要在… PHP中文网 2025年3月3日 • 编程技术 2000 ASP.NET Core 返回 Json DateTime 格式 asp.net core 返回 json 格式的时候,如果返回数据中有datetime类型,如何自定义其格式呢?配置如下: services.AddMvc().AddJsonOptions(opt =>{ opt.Serializer… PHP中文网 编程技术 2025年3月3日 1000 编程技术 属性值反序列化失败怎么解决? 简介:本人在开发webapi接口时遇到了:一个复杂的json字符串在反序列化为对象时报,无法发序列化其中的一个属性对象? 使用方法: InternalRecommendRequestFormModel formData = Newton… PHP中文网 2025年3月3日 2000 C#中如何格式化json字符串的方法分析 这篇文章主要介绍了c#格式化json字符串的方法,结合实例形式分析了c#针对json字符串格式化的原理、步骤与具体实现技巧,需要的朋友可以参考下 本文实例讲述了C#格式化json字符串的方法。分享给大家供大家参考,具体如下: 将Json字符… PHP中文网 编程技术 2025年3月3日 2000 asp如何解析json字符串并转化为asp对象 本文介绍如何使用asp解析json字符串,大家都知道asp对json的处理没有php那么简单,也没有键值对数组,这可能也是它最终被php取代的直接原因。 下面代码经本人测试可用, 代码如下: Dim scriptCtrlFunction p… PHP中文网 编程技术 2025年3月3日 2000 编程技术 C#开发中如何处理XML和JSON数据格式 C#开发中如何处理XML和JSON数据格式,需要具体代码示例 在现代软件开发中,XML和JSON是广泛应用的两种数据格式。XML(可扩展标记语言)是一种用于存储和传输数据的标记语言,而JSON(JavaScript对象表示)是一种轻量级的数… PHP中文网 2025年3月3日 2000 编程技术 为什么用json不用xml 原因:1、JSON结构更容易映射至一般语言的数据结构;2、XML需要选择怎么处理element+content的换行,json不需要;3、XML没有预设的数字格式,JSON有;4、XML数组元素tag比较重复冗余,JSON比较易读。 为什么… PHP中文网 2025年3月3日 2000 讨论golang中怎么将数据转为json格式 随着互联网时代的到来,数据的传输和处理变得越来越重要。在现代软件开发过程中,处理数据的能力非常重要。golang 语言作为一种现代的编程语言,具有很强的数据处理能力。其中,将 golang 中的结构体转换为 json 格式非常常见。本文将讨… PHP中文网 编程技术 2025年3月3日 2000 如何在Go中使用JSON? json(javascript object notation)是一种轻量级的数据交换格式,经常用于从服务器向客户端发送数据,以及在不同系统之间传递数据。在go语言中,使用json也很简单,本文将介绍如何使用go处理json数据,并为读者提… PHP中文网 编程技术 2025年3月2日 2000 发表回复 请登录后评论...登录后才能评论 提交 分享到:微信微信扫码分享QQ好友QQ空间微博豆瓣邮件