namespace ServiceLib.Common; public class JsonUtils { private static readonly string _tag = "JsonUtils"; private static readonly JsonSerializerOptions _defaultDeserializeOptions = new() { PropertyNameCaseInsensitive = true, ReadCommentHandling = JsonCommentHandling.Skip }; private static readonly JsonSerializerOptions _defaultSerializeOptions = new() { WriteIndented = true, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping }; private static readonly JsonSerializerOptions _defaultSerializeNoIndentedOptions = new() { WriteIndented = false, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping }; private static readonly JsonSerializerOptions _nullValueSerializeOptions = new() { WriteIndented = true, DefaultIgnoreCondition = JsonIgnoreCondition.Never, Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping }; private static readonly JsonSerializerOptions _nullValueSerializeNoIndentedOptions = new() { WriteIndented = false, DefaultIgnoreCondition = JsonIgnoreCondition.Never, Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping }; private static readonly JsonDocumentOptions _defaultDocumentOptions = new() { CommentHandling = JsonCommentHandling.Skip }; /// /// DeepCopy /// /// /// /// public static T? DeepCopy(T? obj) { if (obj is null) { return default; } return Deserialize(Serialize(obj, false)); } /// /// Deserialize to object /// /// /// /// public static T? Deserialize(string? strJson) { try { if (string.IsNullOrWhiteSpace(strJson)) { return default; } return JsonSerializer.Deserialize(strJson, _defaultDeserializeOptions); } catch { return default; } } /// /// parse /// /// /// public static JsonNode? ParseJson(string? strJson) { try { if (string.IsNullOrWhiteSpace(strJson)) { return null; } return JsonNode.Parse(strJson, nodeOptions: null, _defaultDocumentOptions); } catch { //SaveLog(ex.Message, ex); return null; } } /// /// Serialize Object to Json string /// /// /// /// /// public static string Serialize(object? obj, bool indented = true, bool nullValue = false) { var result = string.Empty; try { if (obj == null) { return result; } var options = (nullValue, indented) switch { (true, true) => _nullValueSerializeOptions, (true, false) => _nullValueSerializeNoIndentedOptions, (false, true) => _defaultSerializeOptions, _ => _defaultSerializeNoIndentedOptions }; result = JsonSerializer.Serialize(obj, options); } catch (Exception ex) { Logging.SaveLog(_tag, ex); } return result; } /// /// Serialize Object to Json string /// /// /// /// public static string Serialize(object? obj, JsonSerializerOptions? options) { var result = string.Empty; try { if (obj == null) { return result; } result = JsonSerializer.Serialize(obj, options ?? _defaultSerializeOptions); } catch (Exception ex) { Logging.SaveLog(_tag, ex); } return result; } /// /// SerializeToNode /// /// /// public static JsonNode? SerializeToNode(object? obj, JsonSerializerOptions? options = null) { return JsonSerializer.SerializeToNode(obj, options); } }