MaskConverter2.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. #if NET5_0_OR_GREATER
  2. using System;
  3. using System.Text.Json;
  4. using System.Text.Json.Serialization;
  5. namespace Masuit.Tools.Systems.Text.Json;
  6. public class MaskConverter : JsonConverter<string>
  7. {
  8. /// <summary>Reads and converts the JSON to type <typeparamref name="T" />.</summary>
  9. /// <param name="reader">The reader.</param>
  10. /// <param name="typeToConvert">The type to convert.</param>
  11. /// <param name="options">An object that specifies serialization options to use.</param>
  12. /// <returns>The converted value.</returns>
  13. public override string Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
  14. {
  15. return reader.GetString();
  16. }
  17. /// <summary>Writes a specified value as JSON.</summary>
  18. /// <param name="writer">The writer to write to.</param>
  19. /// <param name="value">The value to convert to JSON.</param>
  20. /// <param name="options">An object that specifies serialization options to use.</param>
  21. public override void Write(Utf8JsonWriter writer, string value, JsonSerializerOptions options)
  22. {
  23. writer.WriteStringValue(string.IsNullOrEmpty(value) ? value : value.Mask());
  24. }
  25. }
  26. public class MaskEmailConverter : JsonConverter<string>
  27. {
  28. /// <summary>Reads and converts the JSON to type <typeparamref name="T" />.</summary>
  29. /// <param name="reader">The reader.</param>
  30. /// <param name="typeToConvert">The type to convert.</param>
  31. /// <param name="options">An object that specifies serialization options to use.</param>
  32. /// <returns>The converted value.</returns>
  33. public override string Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
  34. {
  35. return reader.GetString();
  36. }
  37. /// <summary>Writes a specified value as JSON.</summary>
  38. /// <param name="writer">The writer to write to.</param>
  39. /// <param name="value">The value to convert to JSON.</param>
  40. /// <param name="options">An object that specifies serialization options to use.</param>
  41. public override void Write(Utf8JsonWriter writer, string value, JsonSerializerOptions options)
  42. {
  43. writer.WriteStringValue(string.IsNullOrEmpty(value) ? value : value.MaskEmail());
  44. }
  45. }
  46. public class ObjectJsonConverter : JsonConverter<object>
  47. {
  48. public override object? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
  49. {
  50. if (reader.TokenType == JsonTokenType.String)
  51. {
  52. if (DateTime.TryParse(reader.GetString(), out DateTime dateTime))
  53. return dateTime;
  54. return reader.GetString();
  55. }
  56. if (reader.TokenType == JsonTokenType.Number)
  57. {
  58. if (reader.TryGetInt32(out int intNum))
  59. return intNum;
  60. if (reader.TryGetDouble(out double doubleNum))
  61. return doubleNum;
  62. return reader.GetDecimal();
  63. }
  64. return reader.GetDecimal();
  65. }
  66. public override void Write(Utf8JsonWriter writer, object value, JsonSerializerOptions options)
  67. {
  68. Type objType = value.GetType();
  69. if (value == null)
  70. writer.WriteNullValue();
  71. if (objType == typeof(string) || objType == typeof(DateTime) || objType == typeof(Guid))
  72. writer.WriteStringValue(value.ToString());
  73. else if (objType == typeof(int))
  74. writer.WriteNumberValue((int)value);
  75. else if (objType == typeof(double))
  76. writer.WriteNumberValue((double)value);
  77. else if (objType == typeof(decimal))
  78. writer.WriteNumberValue((decimal)value);
  79. else if (objType == typeof(char))
  80. writer.WriteNumberValue((char)value);
  81. else if (objType == typeof(bool))
  82. writer.WriteBooleanValue((bool)value);
  83. else
  84. writer.WriteStringValue(value.ToString());
  85. }
  86. }
  87. public class DateTimeJsonConverter : JsonConverter<DateTime>
  88. {
  89. public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
  90. {
  91. if (reader.TokenType == JsonTokenType.String)
  92. {
  93. if (DateTime.TryParse(reader.GetString(), out DateTime dateTime))
  94. {
  95. return dateTime;
  96. }
  97. }
  98. return reader.GetDateTime();
  99. }
  100. public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)
  101. {
  102. writer.WriteStringValue(value.ToString("yyyy-MM-dd HH:mm:ss"));
  103. }
  104. }
  105. #endif