ABP框架 返回JSON时间带T格式转换解决方式

问题:因为使用的是ABP3.9以上版本,利用网上的修改返回json的时间格式 不是无效就是在提交表单时时间格式被验证无效

1、说明:ABP的json转换主要是利用Newtonsoft.Json来进行,WebApi的表单提交与控制器方法的返回的json的是经过ReadJson和WriteJson

2、创建MyAbpCamelCasePropertyNamesContractResolver继承AbpCamelCasePropertyNamesContractResolver

3、创建MyAbpDateTimeConverter继承AbpDateTimeConverter

具体代码如下:

1、新建MyAbpDateTimeConverter

 1 public class MyAbpDateTimeConverter : AbpDateTimeConverter
 2     {
 3         public override bool CanConvert(Type objectType)
 4         {
 5             return objectType == typeof(DateTime) || objectType == typeof(DateTime?);
 6         }
 7 
 8         public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
 9         {
10             //DateTime.ParseExact(reader.Value.ToString(),"yyyy-MM-dd HH:mm:ss",(IFormatProvider)this.Culture, DateTimeStyles.RoundtripKind);
11             this.DateTimeFormat = "";
12             DateTime? nullable = base.ReadJson(reader, objectType, existingValue, serializer) as DateTime?;
13             if (nullable.HasValue)
14                 return (object)Clock.Normalize(nullable.Value);
15             return (object)null;
16         }
17 
18         public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
19         {
20             DateTime? nullable = value as DateTime?;
21             base.WriteJson(writer, nullable.HasValue ? (object)Clock.Normalize(nullable.Value) : value, serializer);
22         }
23     }
View Code

2、新建MyAbpCamelCasePropertyNamesContractResolver

public class MyAbpCamelCasePropertyNamesContractResolver: AbpCamelCasePropertyNamesContractResolver
    {
        protected override void ModifyProperty(MemberInfo member, JsonProperty property)
        {
            base.ModifyProperty(member, property);

            if (property.Converter is IsoDateTimeConverter)
            {
                property.Converter = new MyAbpDateTimeConverter()
                {
                    DateTimeFormat= "yyyy-MM-dd HH:mm:ss"
                };
            }
        }
    }

3、在ABP中WebApiModule模块中重写PostInitialize()

public override void PostInitialize()
        {
            base.PostInitialize();
            Configuration.Modules.AbpWebApi().HttpConfiguration.Formatters.JsonFormatter.SerializerSettings.ContractResolver =
                new MyAbpCamelCasePropertyNamesContractResolver();
        }

猜你喜欢

转载自www.cnblogs.com/whyong88/p/10178574.html
ABP