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;
}
}