using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using Hncore.Infrastructure.Common; using Newtonsoft.Json; using Newtonsoft.Json.Serialization; namespace Hncore.Infrastructure.Serializer { public class NullToEmptyStringResolver : DefaultContractResolver { protected override IList 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 = ""; } else if ((_MemberInfo.PropertyType == typeof(DateTime) || _MemberInfo.PropertyType == typeof(DateTime?)) && result != null) { if (result.ToString() == "0001/1/1 0:00:00" || result.ToString() == "1000/1/1 0:00:00") { result = DateTimeHelper.SqlMinTime; } DateTime time = Convert.ToDateTime(result); if (time == DateTimeHelper.SqlMaxTime || time == DateTimeHelper.SqlMinTime || time == DateTime.MaxValue || time == DateTime.MinValue) { result = ""; } } else if (_MemberInfo.PropertyType.Name == "List`1" && result == null) { result = new List(); } else if (_MemberInfo.PropertyType.Name == "Object" && result == null) { result = new { }; } return result; } public void SetValue(object target, object value) { _MemberInfo.SetValue(target, value); } } }