DeserializeOnlyContractResolver.cs 1.1 KB

12345678910111213141516171819202122232425262728293031
  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. if (property.AttributeProvider.GetAttributes(typeof(DeserializeOnlyJsonPropertyAttribute), true).Union(property.AttributeProvider.GetAttributes(typeof(SerializeIgnoreAttribute), true)).Any())
  17. {
  18. property.ShouldSerialize = _ => false;
  19. }
  20. if (property.AttributeProvider.GetAttributes(typeof(SerializeOnlyJsonPropertyAttribute), true).Union(property.AttributeProvider.GetAttributes(typeof(DeserializeIgnoreAttribute), true)).Any())
  21. {
  22. property.ShouldDeserialize = _ => false;
  23. }
  24. }
  25. return property;
  26. }
  27. }