82 lines
2.3 KiB
C#
82 lines
2.3 KiB
C#
using Newtonsoft.Json;
|
|
using Newtonsoft.Json.Serialization;
|
|
using System;
|
|
using System.Linq;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using System.Reflection;
|
|
|
|
namespace APT.Infrastructure.Core
|
|
{
|
|
public class JsonContractResolver : DefaultContractResolver
|
|
{
|
|
protected override IValueProvider CreateMemberValueProvider(MemberInfo member)
|
|
{
|
|
return new JsonExpressionValueProvider(member);
|
|
}
|
|
protected override JsonProperty CreatePropertyFromConstructorParameter(JsonProperty matchingMemberProperty, ParameterInfo parameterInfo)
|
|
{
|
|
var temp = base.CreatePropertyFromConstructorParameter(matchingMemberProperty, parameterInfo);
|
|
if (temp.PropertyType.GetUnNullableType() == typeof(Guid) ||
|
|
temp.PropertyType.GetUnNullableType() == typeof(DateTime))
|
|
temp.NullValueHandling = NullValueHandling.Include;
|
|
return temp;
|
|
}
|
|
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
|
|
{
|
|
var temp = base.CreateProperty(member, memberSerialization);
|
|
if (temp.PropertyType.GetUnNullableType() == typeof(Guid) ||
|
|
temp.PropertyType.GetUnNullableType() == typeof(DateTime))
|
|
temp.NullValueHandling = NullValueHandling.Include;
|
|
return temp;
|
|
}
|
|
}
|
|
|
|
public class JsonExpressionValueProvider : ExpressionValueProvider, IValueProvider
|
|
{
|
|
private readonly MemberInfo _memberInfo;
|
|
|
|
public JsonExpressionValueProvider(MemberInfo memberInfo):base(memberInfo)
|
|
{
|
|
_memberInfo = memberInfo;
|
|
}
|
|
|
|
|
|
protected virtual object GetValueByType(Type type)
|
|
{
|
|
object obj = null;
|
|
if (type == typeof(decimal))
|
|
obj = decimal.Zero;
|
|
else if (type == typeof(int))
|
|
obj = 0;
|
|
else if (type == typeof(byte))
|
|
obj = byte.MinValue;
|
|
else if (type == typeof(bool))
|
|
obj = false;
|
|
else if (type == typeof(double))
|
|
obj = (double)0;
|
|
return obj;
|
|
}
|
|
|
|
public new object GetValue(object target)
|
|
{
|
|
object obj = base.GetValue(target);
|
|
if (obj == null)
|
|
{
|
|
Type realType = null;
|
|
PropertyInfo propertyInfo = _memberInfo as PropertyInfo;
|
|
if (propertyInfo != null)
|
|
realType = propertyInfo.PropertyType.GetUnNullableType();
|
|
FieldInfo fieldInfo = _memberInfo as FieldInfo;
|
|
if (fieldInfo != null)
|
|
realType = fieldInfo.FieldType.GetUnNullableType();
|
|
if (realType != null)
|
|
obj = this.GetValueByType(realType);
|
|
}
|
|
return obj;
|
|
}
|
|
}
|
|
|
|
|
|
}
|