方法
使用 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
网友评论