DeserializeOnlyContractResolver.cs 903 B

123456789101112131415161718192021222324252627
  1. using Newtonsoft.Json;
  2. using Newtonsoft.Json.Serialization;
  3. using System.Linq;
  4. using System.Reflection;
  5. namespace Masuit.Tools.Systems;
  6. /// <summary>
  7. /// 只允许反序列化的契约解释器
  8. /// </summary>
  9. public class DeserializeOnlyContractResolver : DefaultContractResolver
  10. {
  11. protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
  12. {
  13. var property = base.CreateProperty(member, memberSerialization);
  14. if (property is { Writable: true })
  15. {
  16. var attributes = property.AttributeProvider.GetAttributes(typeof(DeserializeOnlyJsonPropertyAttribute), true).Union(property.AttributeProvider.GetAttributes(typeof(SerializeIgnoreAttribute), true));
  17. if (attributes.Any())
  18. {
  19. property.ShouldSerialize = _ => false;
  20. }
  21. }
  22. return property;
  23. }
  24. }