using System.Text.Encodings.Web; using System.Text.Json; using System.Text.Json.Nodes; using System.Text.Json.Serialization; namespace ServiceLib.Common; public class JsonUtils { private static readonly string _tag = "JsonUtils"; /// /// DeepCopy /// /// /// /// public static T DeepCopy(T obj) { return Deserialize(Serialize(obj, false))!; } /// /// Deserialize to object /// /// /// /// public static T? Deserialize(string? strJson) { try { if (string.IsNullOrWhiteSpace(strJson)) { return default; } var options = new JsonSerializerOptions { PropertyNameCaseInsensitive = true }; return JsonSerializer.Deserialize(strJson, options); } catch { return default; } } /// /// parse /// /// /// public static JsonNode? ParseJson(string strJson) { try { if (string.IsNullOrWhiteSpace(strJson)) { return null; } return JsonNode.Parse(strJson); } 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 = new JsonSerializerOptions { WriteIndented = indented, DefaultIgnoreCondition = nullValue ? JsonIgnoreCondition.Never : JsonIgnoreCondition.WhenWritingNull, Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping }; 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); } catch (Exception ex) { Logging.SaveLog(_tag, ex); } return result; } /// /// SerializeToNode /// /// /// public static JsonNode? SerializeToNode(object? obj) => JsonSerializer.SerializeToNode(obj); }