#if NET5_0_OR_GREATER using System; using System.Text.Json; using System.Text.Json.Serialization; namespace Masuit.Tools.Systems.Text.Json; public class MaskConverter : JsonConverter { /// Reads and converts the JSON to type . /// The reader. /// The type to convert. /// An object that specifies serialization options to use. /// The converted value. public override string Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { return reader.GetString(); } /// Writes a specified value as JSON. /// The writer to write to. /// The value to convert to JSON. /// An object that specifies serialization options to use. public override void Write(Utf8JsonWriter writer, string value, JsonSerializerOptions options) { writer.WriteStringValue(string.IsNullOrEmpty(value) ? value : value.Mask()); } } public class MaskEmailConverter : JsonConverter { /// Reads and converts the JSON to type . /// The reader. /// The type to convert. /// An object that specifies serialization options to use. /// The converted value. public override string Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { return reader.GetString(); } /// Writes a specified value as JSON. /// The writer to write to. /// The value to convert to JSON. /// An object that specifies serialization options to use. public override void Write(Utf8JsonWriter writer, string value, JsonSerializerOptions options) { writer.WriteStringValue(string.IsNullOrEmpty(value) ? value : value.MaskEmail()); } } public class ObjectJsonConverter : JsonConverter { public override object? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType == JsonTokenType.String) { if (DateTime.TryParse(reader.GetString(), out DateTime dateTime)) return dateTime; return reader.GetString(); } if (reader.TokenType == JsonTokenType.Number) { if (reader.TryGetInt32(out int intNum)) return intNum; if (reader.TryGetDouble(out double doubleNum)) return doubleNum; return reader.GetDecimal(); } return reader.GetDecimal(); } public override void Write(Utf8JsonWriter writer, object value, JsonSerializerOptions options) { Type objType = value.GetType(); if (value == null) writer.WriteNullValue(); if (objType == typeof(string) || objType == typeof(DateTime) || objType == typeof(Guid)) writer.WriteStringValue(value.ToString()); else if (objType == typeof(int)) writer.WriteNumberValue((int)value); else if (objType == typeof(double)) writer.WriteNumberValue((double)value); else if (objType == typeof(decimal)) writer.WriteNumberValue((decimal)value); else if (objType == typeof(char)) writer.WriteNumberValue((char)value); else if (objType == typeof(bool)) writer.WriteBooleanValue((bool)value); else writer.WriteStringValue(value.ToString()); } } public class DateTimeJsonConverter : JsonConverter { public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType == JsonTokenType.String) { if (DateTime.TryParse(reader.GetString(), out DateTime dateTime)) { return dateTime; } } return reader.GetDateTime(); } public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options) { writer.WriteStringValue(value.ToString("yyyy-MM-dd HH:mm:ss")); } } #endif