美文网首页
.Net Core 属性时间格式化(非全局)

.Net Core 属性时间格式化(非全局)

作者: Rinaloving | 来源:发表于2022-06-17 13:06 被阅读0次
方法

使用 using Newtonsoft.Json;

    public class ChinaDateTimeConverter : DateTimeConverterBase
    {
        private static IsoDateTimeConverter dtConverter = new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd" };
        /// <summary>
        /// ReadJson
        /// </summary>
        /// <param name="reader"></param>
        /// <param name="objectType"></param>
        /// <param name="existingValue"></param>
        /// <param name="serializer"></param>
        /// <returns></returns>
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            return dtConverter.ReadJson(reader, objectType, existingValue, serializer);
        }
        /// <summary>
        /// WriteJson
        /// </summary>
        /// <param name="writer"></param>
        /// <param name="value"></param>
        /// <param name="serializer"></param>
        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            dtConverter.WriteJson(writer, value, serializer);
        }
    }
使用
   
        [SugarColumn(IsNullable = true, ColumnName = "tGoodsValidity")]
        [JsonConverter(typeof(ChinaDateTimeConverter))]
        public DateTime? TGoodsValidity { get; set; }

效果

使用前:


时间格式化.png

使用后:


格式化后.png
如果使用了上面方法,下面这个让所有null的字段 自动转为 “” 就无法使用

创建一个类 NullToEmptyStringResolver

public class NullToEmptyStringResolver : Newtonsoft.Json.Serialization.DefaultContractResolver
    {
        protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
        {
            return type.GetProperties()
                    .Select(p => {
                        var jp = base.CreateProperty(p, memberSerialization);
                        jp.ValueProvider = new NullToEmptyStringValueProvider(p);
                        return jp;
                    }).ToList();
        }
    }

    public class NullToEmptyStringValueProvider : IValueProvider
    {
        PropertyInfo _MemberInfo;
        public NullToEmptyStringValueProvider(PropertyInfo memberInfo)
        {
            _MemberInfo = memberInfo;
        }

        public object GetValue(object target)
        {
            object result = _MemberInfo.GetValue(target);
            if (_MemberInfo.PropertyType == typeof(string) && result == null) result = "";
            return result;

        }

        public void SetValue(object target, object value)
        {
            _MemberInfo.SetValue(target, value);
        }
    }
使用
              var settings = new JsonSerializerSettings() { ContractResolver = new NullToEmptyStringResolver()};
                settings.DateFormatString = "yyyy-MM-dd";
                var resData = JsonConvert.DeserializeObject<GoodsModel>( JsonConvert.SerializeObject(data, settings));

这面设置时间也无效(因为配置了全局)
全局 Startup.cs

 services.AddMvc(option =>
            {
                option.EnableEndpointRouting = false;
            }).SetCompatibilityVersion(CompatibilityVersion.Version_3_0).AddControllersAsServices().AddNewtonsoftJson
            (
                json =>
                {
                    //统一设置JsonResult
                    json.SerializerSettings.ContractResolver = new DefaultContractResolver();
                    json.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
                    //json.SerializerSettings.ContractResolver =  new NullToEmptyStringResolver();
                    json.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
                    
                    //json.SerializerSettings.NullValueHandling = NullValueHandling.Include;
                    //json.SerializerSettings.DefaultValueHandling = DefaultValueHandling.Ignore;
                    //var settings = new JsonSerializerSettings() { ContractResolver = new NullToEmptyStringResolver() };
                    //var str = JsonConvert.SerializeObject(yourObj, settings);
                }
            );
时间格式2.png
上面的属性可以

相关文章

网友评论

      本文标题:.Net Core 属性时间格式化(非全局)

      本文链接:https://www.haomeiwen.com/subject/tiicvrtx.html