using System.Globalization; using System.Text.Json; namespace SJZY.Track.Application.Helpers; /// /// 针对 Text.Json 的一些辅助方法 /// public static class TextJsonHelper { public static string? Serialize(object? obj) { return obj == null ? default : System.Text.Json.JsonSerializer.Serialize(obj); } public static T? Deserialize(string? json) { return string.IsNullOrWhiteSpace(json) ? default : System.Text.Json.JsonSerializer.Deserialize(json); } public static Dictionary? DeserializeDictionary(string? dictJsonString) { return string.IsNullOrWhiteSpace(dictJsonString) ? null : System.Text.Json.JsonSerializer.Deserialize>(dictJsonString); } /// /// 获取JsonElement字符串表达的值 /// /// /// public static string? GetString(object? el) { if (el is not JsonElement jsonElement) return default; return jsonElement.ValueKind switch { JsonValueKind.Undefined or JsonValueKind.Null => default, JsonValueKind.True or JsonValueKind.False => jsonElement.GetBoolean().ToString(), JsonValueKind.Object or JsonValueKind.Array or JsonValueKind.Number => jsonElement.GetRawText(), JsonValueKind.String => jsonElement.GetString(), _ => default }; } /// /// 提取字典字符串中某个字段的值 /// /// 字典json字符串 /// /// public static object? ExtractValue(string? dictString, string fieldName) { if (string.IsNullOrWhiteSpace(dictString)) { return null; } var dict = System.Text.Json.JsonSerializer.Deserialize>(dictString); if (dict == null || !dict.TryGetValue(fieldName, out var value)) { return null; } return value; } /// /// 两个jsonElement进行比较 /// /// /// /// public static bool EqJsonElement(object? a, object? b) { if (a == null && b == null) { return true; } if (a is JsonElement aJsonElement && b is JsonElement bJsonElement) { return aJsonElement.ToString() == bJsonElement.ToString(); } return false; } /// /// jsonElement和object之间的比较 /// /// /// /// public static bool EqJsonElementAndObject(object? jsonElement, object? obj) { if (jsonElement == null && obj == null) { return true; } if (jsonElement is JsonElement aJsonElement) { switch (aJsonElement.ValueKind) { case JsonValueKind.Undefined: return false; case JsonValueKind.Object: return false; case JsonValueKind.Array: return false; case JsonValueKind.String: return string.Equals(aJsonElement.GetString(), obj as string); case JsonValueKind.Number: { if (obj == null) return false; if (obj is int bInt) { var aInt = aJsonElement.GetInt32(); return aInt == bInt; } if (obj is long bLong) { var aLong = aJsonElement.GetInt64(); return aLong == bLong; } return false; } case JsonValueKind.True: case JsonValueKind.False: { if (obj is bool bl) { return aJsonElement.GetBoolean() == bl; } return false; } case JsonValueKind.Null: { return false; } } } return false; } /// /// 比较两个jsonElement中的的fieldName字段的值 /// /// /// /// /// public static bool EqByJsonElementField(object a, object b, string fieldName) { if (a is not JsonElement aJsonElement || b is not JsonElement bJsonElement) return false; if (aJsonElement.TryGetProperty(fieldName, out var aValue) && bJsonElement.TryGetProperty(fieldName, out var bValue)) { return aValue.ToString() == bValue.ToString(); } return false; } }