using IRaCIS.Core.Infrastructure.NewtonsoftJson; using Newtonsoft.Json; using Newtonsoft.Json.Serialization; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; namespace IRaCIS.Core.API { /// /// LowerCamelCaseJsonAttribute 可以设置类小写返回给前端 /// public class NullToEmptyStringResolver : DefaultContractResolver { protected override IList CreateProperties(Type type, MemberSerialization memberSerialization) { // 检查类是否有 LowerCamelCaseJsonAttribute 标记 有的话,属性名小写 if (type.GetCustomAttribute() != null) { base.NamingStrategy = new LowerCamelCaseNamingStrategy(); } else { base.NamingStrategy = null; } IList properties = base.CreateProperties(type, memberSerialization); var list = type.GetProperties() .Select(p => { var jp = base.CreateProperty(p, memberSerialization); jp.ValueProvider = new NullToEmptyStringValueProvider(p); return jp; }).ToList(); var uu = list.Select(t => t.PropertyName).ToList(); //获取复杂对象属性 properties = properties.TakeWhile(t => !uu.Contains(t.PropertyName)).ToList(); list.AddRange(properties); return list; } } 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(String[]) && result == null) result = new string[] { }; //else if (_MemberInfo.PropertyType == typeof(Nullable) && result == null) result = 0; //else if (_MemberInfo.PropertyType == typeof(Nullable) && result == null) result = 0.00M; return result; } public void SetValue(object target, object value) { if (_MemberInfo.PropertyType == typeof(string)) { //去掉前后空格 _MemberInfo.SetValue(target, value == null ? string.Empty : value.ToString() == string.Empty ? value : value/*.ToString().Trim()*/); } else { _MemberInfo.SetValue(target, value); } } } }