在调用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);
        }




GitHub 加速计划 / js / json
41.72 K
6.61 K
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:13 小时前 )
960b763e 2 个月前
8c391e04 5 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐