Files
Masuit.Tools/Masuit.Tools.Abstractions/Systems/DeserializeOnlyContractResolver.cs
懒得勤快 53907daf9c DbSet类型支持递归Include
Newtonsoft支持自定义忽略行为
2022-05-25 16:05:13 +08:00

32 lines
1.1 KiB
C#

using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using System.Linq;
using System.Reflection;
namespace Masuit.Tools.Systems;
/// <summary>
/// 只允许反序列化的契约解释器
/// </summary>
public class DeserializeOnlyContractResolver : DefaultContractResolver
{
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
var property = base.CreateProperty(member, memberSerialization);
if (property is { Writable: true })
{
if (property.AttributeProvider.GetAttributes(typeof(DeserializeOnlyJsonPropertyAttribute), true).Union(property.AttributeProvider.GetAttributes(typeof(SerializeIgnoreAttribute), true)).Any())
{
property.ShouldSerialize = _ => false;
}
if (property.AttributeProvider.GetAttributes(typeof(SerializeOnlyJsonPropertyAttribute), true).Union(property.AttributeProvider.GetAttributes(typeof(DeserializeIgnoreAttribute), true)).Any())
{
property.ShouldDeserialize = _ => false;
}
}
return property;
}
}