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);
 | 
						|
            }
 | 
						|
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |