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