Files
juipnet/Infrastructure/Hncore.Infrastructure/Serializer/JsonNetSetting.cs

74 lines
2.3 KiB
C#
Raw Normal View History

2024-04-10 13:55:27 +08:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using Hncore.Infrastructure.Common;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
namespace Hncore.Infrastructure.Serializer
{
public class NullToEmptyStringResolver : DefaultContractResolver
{
protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
{
return type.GetProperties()
.Select(p =>
{
var jp = base.CreateProperty(p, memberSerialization);
jp.ValueProvider = new NullToEmptyStringValueProvider(p);
return jp;
}).ToList();
}
}
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(DateTime) || _MemberInfo.PropertyType == typeof(DateTime?)) &&
result != null)
{
if (result.ToString() == "0001/1/1 0:00:00" || result.ToString() == "1000/1/1 0:00:00")
{
result = DateTimeHelper.SqlMinTime;
}
DateTime time = Convert.ToDateTime(result);
if (time == DateTimeHelper.SqlMaxTime || time == DateTimeHelper.SqlMinTime || time == DateTime.MaxValue ||
time == DateTime.MinValue)
{
result = "";
}
}
else if (_MemberInfo.PropertyType.Name == "List`1" && result == null)
{
result = new List<object>();
}
else if (_MemberInfo.PropertyType.Name == "Object" && result == null)
{
result = new { };
}
return result;
}
public void SetValue(object target, object value)
{
_MemberInfo.SetValue(target, value);
}
}
}