53 lines
1.5 KiB
C#
53 lines
1.5 KiB
C#
using Newtonsoft.Json.Serialization;
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Reflection;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace LiveForum.Code.JsonConverterExtend;
|
|
|
|
public class NullToEmptyStringContractResolver : CamelCasePropertyNamesContractResolver
|
|
{
|
|
protected override IValueProvider CreateMemberValueProvider(MemberInfo member)
|
|
{
|
|
var valueProvider = base.CreateMemberValueProvider(member);
|
|
|
|
// 处理字符串属性(包括可空字符串)
|
|
if (member is PropertyInfo property &&
|
|
(property.PropertyType == typeof(string) ||
|
|
(property.PropertyType.IsGenericType &&
|
|
property.PropertyType.GetGenericTypeDefinition() == typeof(Nullable<>) &&
|
|
property.PropertyType.GetGenericArguments()[0] == typeof(string))))
|
|
{
|
|
return new StringValueProvider(valueProvider);
|
|
}
|
|
|
|
return valueProvider;
|
|
}
|
|
|
|
private class StringValueProvider : IValueProvider
|
|
{
|
|
private readonly IValueProvider _innerProvider;
|
|
|
|
public StringValueProvider(IValueProvider innerProvider)
|
|
{
|
|
_innerProvider = innerProvider;
|
|
}
|
|
|
|
public void SetValue(object target, object value)
|
|
{
|
|
_innerProvider.SetValue(target, value);
|
|
}
|
|
|
|
public object GetValue(object target)
|
|
{
|
|
var value = _innerProvider.GetValue(target);
|
|
return value ?? string.Empty;
|
|
}
|
|
}
|
|
}
|
|
|