JsonReturnValueContractResolver.cs 1.2 KB

12345678910111213141516171819202122232425262728293031
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using Newtonsoft.Json;
  5. using Newtonsoft.Json.Serialization;
  6. using VCommon.VApplication.Auditing;
  7. using VCommon.VApplication.DataAnnotations;
  8. namespace VCommon.VOpenApi.Json
  9. {
  10. internal class JsonReturnValueContractResolver : DefaultContractResolver
  11. {
  12. protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
  13. {
  14. var properties = base.CreateProperties(type, memberSerialization);
  15. foreach (var prop in properties)
  16. {
  17. var attrs = prop.AttributeProvider.GetAttributes(true);
  18. //检测并禁止JsonIgnore, 提示使用OutputIgnoreAttribute
  19. if (attrs.Any(p => p is JsonIgnoreAttribute)) throw new VAuditModelException($"检测到{nameof(JsonIgnoreAttribute)}特性,要忽略输出请使用{nameof(OutputIgnoreAttribute)}代替. 类:{type.FullName},成员:{prop.UnderlyingName}");
  20. //用OutputIgnoreAttribute代替JsonIgnore
  21. if (attrs.Any(p => p is OutputIgnoreAttribute)) prop.Ignored = true;
  22. }
  23. return properties;
  24. }
  25. }
  26. }