ASP.NET Core學習之六 JSON全局配置

Startup

全局配置Json序列化處理

1.忽略循環引用
2.long轉string

//全局配置Json序列化處理
    services.AddJsonOptions(options =>
            { 
                //忽略循環引用
                options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
                options.SerializerSettings.Converters.Add(new Common.LongConvert());//Long類型轉換
                //在這裏日期類格式化處理是不起作用的 
                //不返回值爲NULL的屬性,甚用啊,數據要很嚴謹
                //options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
            });

數據處理

1.時間格式
2.string null轉空

Startup

 services.PostConfigure<MvcJsonOptions>(options =>
            {
                options.SerializerSettings.ContractResolver = new CustomContractResolver(); 
            });

自定義轉換

CustomContractResolver

 /// <summary>
/// Json序列化轉換器
/// </summary>
public class CustomContractResolver : AbpCamelCasePropertyNamesContractResolver
{
    protected override void ModifyProperty(MemberInfo member, JsonProperty property)
    {
        if (property.PropertyType == typeof(DateTime) || property.PropertyType == typeof(DateTime?))
        {
            property.Converter = new AbpDateTimeConverter()
            { DateTimeFormat = "yyyy-MM-dd HH:mm:ss" };
        }
        else
        {
            base.ModifyProperty(member, property);
        }
    }
    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();
    }
}

/// <summary>
/// NULL轉爲空字符串
/// </summary>
public class NullToEmptyStringValueProvider : IValueProvider
{
    PropertyInfo _MemberInfo;
    public NullToEmptyStringValueProvider(PropertyInfo memberInfo)
    {
        _MemberInfo = memberInfo;
    }

    public object GetValue(object target)
    {
        object result = _MemberInfo.GetValue(target);
        if (result == null && _MemberInfo.PropertyType.FullName == "System.String") result = "";
        return result;

    }

    public void SetValue(object target, object value)
    {
        _MemberInfo.SetValue(target, value);
    }
}

json序列化小駝峯格式

屬性名首字母爲小寫

var setting = new JsonSerializerSettings
{
    ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver()
};
var json = JsonConvert.SerializeObject(resp, Formatting.None, setting);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章