live-forum/server/webapi/LiveForum/LiveForum.Code/JsonConverterExtend/NullToEmptyStringContractResolver.cs
2026-03-24 11:27:37 +08:00

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