ServerManagers/src/ServerManager.Common/Lib/UserScopedSettingContractResolver.cs
2021-12-16 00:21:23 +10:00

29 lines
1.1 KiB
C#

using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using System.Linq;
using System.Reflection;
namespace ServerManagerTool.Common.Lib
{
public class UserScopedSettingContractResolver : DefaultContractResolver
{
public static readonly UserScopedSettingContractResolver Instance = new UserScopedSettingContractResolver();
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
JsonProperty property = base.CreateProperty(member, memberSerialization);
var customAttributes = member.CustomAttributes ?? new CustomAttributeData[0];
if (customAttributes.Any(a => a.AttributeType == typeof(System.Configuration.UserScopedSettingAttribute)))
{
property.ShouldSerialize = instance => { return property.PropertyType.IsValueType || property.PropertyType == typeof(string); };
}
else
{
property.ShouldSerialize = instance => { return false; };
}
return property;
}
}
}