86 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C#
		
	
	
| 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
 | |
| {
 | |
|     /// <summary>
 | |
|     /// LowerCamelCaseJsonAttribute 可以设置类小写返回给前端
 | |
|     /// </summary>
 | |
|     public class NullToEmptyStringResolver : DefaultContractResolver
 | |
|     {
 | |
| 
 | |
|         protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
 | |
|         {
 | |
|             // 检查类是否有 LowerCamelCaseJsonAttribute 标记  有的话,属性名小写
 | |
|             if (type.GetCustomAttribute<LowerCamelCaseJsonAttribute>() != null)
 | |
|             {
 | |
|                 base.NamingStrategy = new LowerCamelCaseNamingStrategy();
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 base.NamingStrategy = null;
 | |
|             }
 | |
| 
 | |
| 
 | |
|             IList<JsonProperty> 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<Int32>) && result == null) result = 0;
 | |
|             //else if (_MemberInfo.PropertyType == typeof(Nullable<Decimal>) && 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);
 | |
|             }
 | |
| 
 | |
|         }
 | |
|     }
 | |
| }
 |