175 lines
5.2 KiB
C#
175 lines
5.2 KiB
C#
using System.Globalization;
|
|
using System.Text.Json;
|
|
|
|
namespace SJZY.Track.Application.Helpers;
|
|
|
|
/// <summary>
|
|
/// 针对 Text.Json 的一些辅助方法
|
|
/// </summary>
|
|
public static class TextJsonHelper
|
|
{
|
|
public static string? Serialize(object? obj)
|
|
{
|
|
return obj == null ? default : System.Text.Json.JsonSerializer.Serialize(obj);
|
|
}
|
|
|
|
public static T? Deserialize<T>(string? json)
|
|
{
|
|
return string.IsNullOrWhiteSpace(json) ? default : System.Text.Json.JsonSerializer.Deserialize<T>(json);
|
|
}
|
|
|
|
public static Dictionary<string, object?>? DeserializeDictionary(string? dictJsonString)
|
|
{
|
|
return string.IsNullOrWhiteSpace(dictJsonString)
|
|
? null
|
|
: System.Text.Json.JsonSerializer.Deserialize<Dictionary<string, object?>>(dictJsonString);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取JsonElement字符串表达的值
|
|
/// </summary>
|
|
/// <param name="el"></param>
|
|
/// <returns></returns>
|
|
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
|
|
};
|
|
}
|
|
|
|
/// <summary>
|
|
/// 提取字典字符串中某个字段的值
|
|
/// </summary>
|
|
/// <param name="dictString">字典json字符串</param>
|
|
/// <param name="fieldName"></param>
|
|
/// <returns></returns>
|
|
public static object? ExtractValue(string? dictString, string fieldName)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(dictString))
|
|
{
|
|
return null;
|
|
}
|
|
|
|
var dict = System.Text.Json.JsonSerializer.Deserialize<Dictionary<string, object?>>(dictString);
|
|
if (dict == null || !dict.TryGetValue(fieldName, out var value))
|
|
{
|
|
return null;
|
|
}
|
|
|
|
return value;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 两个jsonElement进行比较
|
|
/// </summary>
|
|
/// <param name="a"></param>
|
|
/// <param name="b"></param>
|
|
/// <returns></returns>
|
|
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;
|
|
}
|
|
|
|
/// <summary>
|
|
/// jsonElement和object之间的比较
|
|
/// </summary>
|
|
/// <param name="jsonElement"></param>
|
|
/// <param name="obj"></param>
|
|
/// <returns></returns>
|
|
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;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 比较两个jsonElement中的的fieldName字段的值
|
|
/// </summary>
|
|
/// <param name="a"></param>
|
|
/// <param name="b"></param>
|
|
/// <param name="fieldName"></param>
|
|
/// <returns></returns>
|
|
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;
|
|
}
|
|
}
|