Files
app/windows/StreamPlayer.Desktop/JsonExtensions.cs
2025-12-17 19:20:55 +00:00

64 lines
2.0 KiB
C#

using System.Text.Json;
namespace StreamPlayer.Desktop;
public static class JsonExtensions
{
public static string GetPropertyOrDefault(this JsonElement element, string propertyName)
{
if (element.ValueKind == JsonValueKind.Object && element.TryGetProperty(propertyName, out var property))
{
return property.ValueKind switch
{
JsonValueKind.String => property.GetString() ?? string.Empty,
JsonValueKind.Number => property.GetRawText(),
JsonValueKind.True => "true",
JsonValueKind.False => "false",
_ => property.GetRawText()
};
}
return string.Empty;
}
public static int GetPropertyOrDefaultInt(this JsonElement element, string propertyName, int fallback = 0)
{
if (element.ValueKind == JsonValueKind.Object && element.TryGetProperty(propertyName, out var property))
{
if (property.TryGetInt32(out var value))
{
return value;
}
}
return fallback;
}
public static long GetPropertyOrDefaultLong(this JsonElement element, string propertyName, long fallback = 0)
{
if (element.ValueKind == JsonValueKind.Object && element.TryGetProperty(propertyName, out var property))
{
if (property.TryGetInt64(out var value))
{
return value;
}
}
return fallback;
}
public static bool GetPropertyOrDefaultBool(this JsonElement element, string propertyName, bool fallback = false)
{
if (element.ValueKind == JsonValueKind.Object && element.TryGetProperty(propertyName, out var property))
{
if (property.ValueKind == JsonValueKind.True)
{
return true;
}
if (property.ValueKind == JsonValueKind.False)
{
return false;
}
}
return fallback;
}
}