Newtonsoft.Json 指定某个属性使用特定的时间格式

Intro

Newtonsoft.Json 是 .NET 下最受欢迎 JSON 操作库,原为 JSON.Net 后改名为 Newtonsoft.Json,之前一直推荐大家使用,除了性能好之外,主要是功能丰富,基本满足所有的可能用到的场景(不区分小写,现在还不行,,)。

遇到这样一个需求,全局使用一种时间格式,某些属性使用特殊的时间格式,这里以一个日期为例

Solution

解决办法:自定义一个 Converter,针对某一个属性使用,DateTimeFormatConverter源码:

using Newtonsoft.Json.Converters;

namespace WeihanLi.Common.Json
{
public class DateTimeFormatConverter : IsoDateTimeConverter
{
public DateTimeFormatConverter(string format)
{
DateTimeFormat = format;
}
}
}

在需要设置格式的属性上设置 Converter https://github.com/WeihanLi/ActivityReservation/blob/dev/ActivityReservation.Helper/ViewModels/ReservationViewModel.cs#L8

[Display(Name = "预约日期")]
[JsonConverter(typeof(DateTimeFormatConverter), "yyyy-MM-dd")]
public DateTime ReservationForDate { get; set; }

请求 api 地址 https://reservation.weihanli.xyz/api/Reservation?pageNumber=1&pageSize=5,返回的数据如下所示:

{
"Data": [
{
"ReservationForDate": "2019-06-10",
"ReservationForTime": "08:00~09:50",
"ReservationPersonPhone": "123****0112",
"ReservationPersonName": "儿**",
"ReservationUnit": "51",
"ReservationPlaceName": "多媒体工作室",
"ReservationActivityContent": "62",
"ReservationId": "f7ab9128-0977-4fd8-9b1a-92648228b397",
"ReservationTime": "2019-06-09 05:19:11",
"ReservationStatus": 1
},
{
"ReservationForDate": "2019-06-12",
"ReservationForTime": "10:00-12:00",
"ReservationPersonPhone": "133****3541",
"ReservationPersonName": "试**",
"ReservationUnit": "ss",
"ReservationPlaceName": "多媒体工作室",
"ReservationActivityContent": "ss",
"ReservationId": "6c145aea-dc14-4ed9-a47f-48c0b79f7601",
"ReservationTime": "2019-06-11 12:45:14",
"ReservationStatus": 0
},
{
"ReservationForDate": "2019-06-17",
"ReservationForTime": "14:00-16:00",
"ReservationPersonPhone": "138****3883",
"ReservationPersonName": "大**",
"ReservationUnit": "1",
"ReservationPlaceName": "多媒体工作室",
"ReservationActivityContent": "1",
"ReservationId": "cebea7bf-44b1-4565-8cdd-78b6156c5f4d",
"ReservationTime": "2019-06-10 02:52:18",
"ReservationStatus": 1
},
{
"ReservationForDate": "2019-06-17",
"ReservationForTime": "08:00-10:00",
"ReservationPersonPhone": "132****4545",
"ReservationPersonName": "冷**",
"ReservationUnit": "技术部",
"ReservationPlaceName": "多媒体工作室",
"ReservationActivityContent": "技术部培训",
"ReservationId": "07f6f8fd-f232-478e-9a94-de0f5fa9b4e9",
"ReservationTime": "2019-06-10 01:44:52",
"ReservationStatus": 2
},
{
"ReservationForDate": "2019-06-22",
"ReservationForTime": "10:00~11:50",
"ReservationPersonPhone": "132****3333",
"ReservationPersonName": "测**",
"ReservationUnit": "测试",
"ReservationPlaceName": "多媒体工作室",
"ReservationActivityContent": "测试",
"ReservationId": "27d0fb7a-ce14-4958-8636-dd10e5526083",
"ReservationTime": "2019-06-18 10:57:06",
"ReservationStatus": 1
}
],
"PageNumber": 1,
"PageSize": 5,
"TotalCount": 18,
"PageCount": 4,
"Count": 5
}

可以看到 ReservationForDate 序列化之后返回的格式如我们指定的格式了~

Newtonsoft.Json 指定某个属性使用特定的时间格式的更多相关文章

  1. Json.Net 使用属性定义日期的序列化格式

    如果一个实体类里所有的时间即DateTime类型的字段,都处理成统一格式的话,可以使用如下方式: IsoDateTimeConverter timeFormat = new IsoDateTimeCo ...

  2. Jackson将对象转换为json字符串时,设置默认的时间格式

    maven需要的依赖: <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifac ...

  3. EF 实体+ Newtonsoft.Json 输出JSON 时动态忽略属性的解决方法

    最近的项目采用的是 ASP.NET mvc 4.0 + entity framework 5.0 ,后台以JSON形式抛出数据是借助于Newtonsoft.Json ,   要想忽略的属性前面添加特性 ...

  4. C# Newtonsoft.Json JObject移除属性,在序列化时忽略

    原文 C# Newtonsoft.Json JObject移除属性,在序列化时忽略 一.针对 单个 对象移除属性,序列化时忽略处理 JObject实例的 Remove() 方法,可以在 指定序列化时移 ...

  5. 分享基于.NET动态编译&Newtonsoft.Json封装实现JSON转换器(JsonConverter)原理及JSON操作技巧

    看文章标题就知道,本文的主题就是关于JSON,JSON转换器(JsonConverter)具有将C#定义的类源代码直接转换成对应的JSON字符串,以及将JSON字符串转换成对应的C#定义的类源代码,而 ...

  6. MVC日期格式化,后台使用Newtonsoft.Json序列化日期,前端使用”f”格式化日期

    MVC控制器中,经常使用Newtonsoft.Json把对象序列化成json字符串传递到前端视图.当对象中有DateTime类型的属性时,前后台如何处理才能把DateTime类型转换成想要的格式呢? ...

  7. 时间格式的时间 转json的时候变成正常的string时间20170519

    public class JsonDateValueProcessor implements JsonValueProcessor { private String format ="yyy ...

  8. Newtonsoft.Json 序列化 排除指定字段或只序列化指定字段

    using Newtonsoft.Json; using Newtonsoft.Json.Serialization; using System; using System.Collections.G ...

  9. Newtonsoft.Json动态过滤属性

    Newtonsoft.Json动态过滤属性 接口写的多了,会发现很多的问题.同一个dto,不同的action返回的字段个数不一样.往往开发人员因为懒或者各种原因一股脑的全返回,会浪费很多流量且用户体验 ...

随机推荐

  1. 【Spring JDBC】NamedParameterJdbcTemplate(四)

    一.什么是具名参数 在经典的 JDBC 用法中, SQL 参数是用占位符 ? 表示,并且受到位置的限制.定位参数的问题在于, 一旦参数的顺序发生变化, 就必须改变参数绑定.在 Spring JDBC ...

  2. 使用matplotlib.pyplot中scatter()绘制散点图

    1.二维散点图 二维散点图的函数原型: matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=Non ...

  3. Redis入门(二)-Redis能够做什么

    引言 在上篇文章中,我们讲述了Redis的基本知识让读者对Redis有了基本的了解.那么这一节我们就来看一下Redis究竟能做什么. 上一节我们提到了Redis可用作数据库,高速缓存和消息队列代理.这 ...

  4. 多线程十 Timer

    定时/计算在java中主要使用的是Timer对象,他的内部依然是采用多线程方式进行处理 它有四个构造方法 方法名 作用 Timer() 空参 Timer(String name) 指定名字 Timer ...

  5. c# 异常精准定位

    在日常项目开发中,异常抛出和捕获是再平常不过的事情.通过try-catch我们可以方便的捕获异常,同时通过查看异常堆栈我们能发现抛出异常代码的位置. 例如下面这段代码: using System; u ...

  6. mitmproxy的使用

    一.介绍 中间人代理可以理解成和中间件差不多 mitmproxy工程工具包,主要包含了3个组件 mitmproxy:拦截的http(s)记录控制台显示 [window不支持] mitmdump:命令行 ...

  7. Flask 教程 第七章:错误处理

    本文翻译自The Flask Mega-Tutorial Part VII: Error Handling 这是Flask Mega-Tutorial系列的第七部分,我将告诉你如何在Flask应用中进 ...

  8. iOS sqlite ORM框架-LKDBHelper

    LKDBHelper 一个sqlite ORM(全自动操作数据库)框架. 线程安全.不再担心递归锁死的问题 安装要求 iOS 4.3+ 仅支持 ARC FMDB 添加到你的项目 如果你使用 Cocoa ...

  9. 基于 Storyboard 多种方式的页面跳转、参数传递

    原文 通过按钮关联跳转 选中 Button ,然后点击 action 右边拖拽到 第二个页面 选择 "Show"即可完成跳转关联. 定义页面间 segue Id,通过代码触发跳转 ...

  10. python redis的连接及相关操作

    1.redis连接.及存取值 import redis r = redis.Redis(host='192.168.2.22',port=6379,db=2,password= 'redis') r. ...