c#json如何格式化日期和时间

在调用JsonConvert.SerializeObject()的时候会出现日期时间

比如:2016-08-22T10:23:38

希望转换的时候不需要T,或者我们需要的只有日期2016-08-22,或者日期是2016/08/22

解决日期时间可使用

IsoDateTimeConverter

namespace Newtonsoft.Json.Converters
{
    public class IsoDateTimeConverter : DateTimeConverterBase
    {
        public IsoDateTimeConverter();

        public CultureInfo Culture { get; set; }
        public string DateTimeFormat { get; set; }
        public DateTimeStyles DateTimeStyles { get; set; }

        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer);
        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer);
    }
}


如果解决日期就不能发挥作用了

此时就要用到JsonSerializerSettings

namespace Newtonsoft.Json
{
    public class JsonSerializerSettings
    {
        public JsonSerializerSettings();

        public SerializationBinder Binder { get; set; }
        public bool CheckAdditionalContent { get; set; }
        public ConstructorHandling ConstructorHandling { get; set; }
        public StreamingContext Context { get; set; }
        public IContractResolver ContractResolver { get; set; }
        public IList<JsonConverter> Converters { get; set; }
        public CultureInfo Culture { get; set; }
        public DateFormatHandling DateFormatHandling { get; set; }
        public DateParseHandling DateParseHandling { get; set; }
        public DateTimeZoneHandling DateTimeZoneHandling { get; set; }
        public DefaultValueHandling DefaultValueHandling { get; set; }
        public EventHandler<ErrorEventArgs> Error { get; set; }
        public Formatting Formatting { get; set; }
        public int? MaxDepth { get; set; }
        public MissingMemberHandling MissingMemberHandling { get; set; }
        public NullValueHandling NullValueHandling { get; set; }
        public ObjectCreationHandling ObjectCreationHandling { get; set; }
        public PreserveReferencesHandling PreserveReferencesHandling { get; set; }
        public ReferenceLoopHandling ReferenceLoopHandling { get; set; }
        public IReferenceResolver ReferenceResolver { get; set; }
        public FormatterAssemblyStyle TypeNameAssemblyFormat { get; set; }
        public TypeNameHandling TypeNameHandling { get; set; }
    }
}

最后总结一个简单调用的方法如下:

/// <summary>
        /// 把对象转换成json
        /// </summary>
        /// <param name="obj">对象</param>
        /// <param name="format">json格式,希望得到的是字符串,还是可读的格式化字符串</param>
        /// <param name="datetimeFormat">日期时间格式</param>
        /// <returns></returns>
        public static string ToJson(this object obj, Formatting format, string datetimeFormat)
        {
            if (string.IsNullOrEmpty(datetimeFormat))
                datetimeFormat = "yyyy-MM-dd HH:mm:ss";
            //日期和间都管用
            JsonSerializerSettings jsSettings = new JsonSerializerSettings();
            jsSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
            jsSettings.Converters.Add(new IsoDateTimeConverter
            {
                DateTimeFormat = datetimeFormat
            });
            return JsonConvert.SerializeObject(obj, format, jsSettings);
            //只对日期时间管用
            //IsoDateTimeConverter timeFormat = new IsoDateTimeConverter();
            //timeFormat.DateTimeFormat = datetimeFormat;
            //return JsonConvert.SerializeObject(obj, format, timeFormat);
        }




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值