JsonConvertOverride.cs 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. using Newtonsoft.Json.Serialization;
  2. using System.Text.Json;
  3. using System.Text.Json.Serialization;
  4. namespace OASystem.API.OAMethodLib
  5. {
  6. #region 日期格式转换
  7. public class DateTimeJsonConverter : System.Text.Json.Serialization.JsonConverter<DateTime>
  8. {
  9. private readonly string Format;
  10. public DateTimeJsonConverter(string format)
  11. {
  12. Format = format;
  13. }
  14. public override void Write(Utf8JsonWriter writer, DateTime date, JsonSerializerOptions options)
  15. {
  16. writer.WriteStringValue(date.ToString(Format));
  17. }
  18. public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
  19. {
  20. return DateTime.ParseExact(reader.GetString(), Format, null);
  21. }
  22. }
  23. #endregion
  24. #region null值转空字符串 NewtonsoftJson
  25. public class NullToEmptyStringResolver : CamelCasePropertyNamesContractResolver
  26. {
  27. /// <summary>
  28. /// 创建属性
  29. /// </summary>
  30. /// <param name="type">类型</param>
  31. /// <param name="memberSerialization">序列化成员</param>
  32. /// <returns></returns>
  33. protected override IList<Newtonsoft.Json.Serialization.JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
  34. {
  35. return type.GetProperties().Select(c =>
  36. {
  37. var jsonProperty = base.CreateProperty(c, memberSerialization);
  38. jsonProperty.ValueProvider = new NullToEmptyStringValueProvider(c);
  39. return jsonProperty;
  40. }).ToList();
  41. }
  42. }
  43. public class NullToEmptyStringValueProvider : IValueProvider
  44. {
  45. private readonly PropertyInfo _memberInfo;
  46. /// <summary>
  47. /// 构造函数
  48. /// </summary>
  49. /// <param name="memberInfo"></param>
  50. public NullToEmptyStringValueProvider(PropertyInfo memberInfo)
  51. {
  52. _memberInfo = memberInfo;
  53. }
  54. /// <summary>
  55. /// 获取Value
  56. /// </summary>
  57. /// <param name="target"></param>
  58. /// <returns></returns>
  59. public object GetValue(object target)
  60. {
  61. var result = _memberInfo.GetValue(target);
  62. if (_memberInfo.PropertyType == typeof(string) && result == null)
  63. result = string.Empty;
  64. return result;
  65. }
  66. /// <summary>
  67. /// 设置Value
  68. /// </summary>
  69. /// <param name="target"></param>
  70. /// <param name="value"></param>
  71. public void SetValue(object target, object value)
  72. {
  73. _memberInfo.SetValue(target, value);
  74. }
  75. }
  76. #endregion
  77. }