elsa-core/src/modules/Elsa.Expressions.JavaScript/ObjectConverters/JsonElementConverter.cs

37 lines
1.4 KiB
C#
Raw Normal View History

using System.Diagnostics.CodeAnalysis;
using System.Text.Json;
using System.Text.Json.Nodes;
using Jint;
using Jint.Native;
using Jint.Runtime.Interop;
2025-05-20 11:52:19 +00:00
namespace Elsa.Expressions.JavaScript.ObjectConverters;
internal class JsonElementConverter : IObjectConverter
{
public bool TryConvert(Engine engine, object value, [NotNullWhen(true)] out JsValue? result)
{
if (value is JsonElement jsonElement)
{
result = ConvertJsonElementToJsValue(engine, jsonElement);
return true;
}
result = JsValue.Null;
return false;
}
private static JsValue ConvertJsonElementToJsValue(Engine engine, JsonElement element) =>
element.ValueKind switch
{
JsonValueKind.Object => JsValue.FromObject(engine, JsonObject.Create(element)),
JsonValueKind.Array => JsValue.FromObject(engine, JsonArray.Create(element)),
JsonValueKind.String => JsValue.FromObject(engine, element.GetString()),
JsonValueKind.Number => element.TryGetInt32(out var intValue) ? JsNumber.Create(intValue) : JsNumber.Create(element.GetDouble()),
JsonValueKind.True => JsBoolean.True,
JsonValueKind.False => JsBoolean.False,
JsonValueKind.Undefined => JsValue.Undefined,
JsonValueKind.Null => JsValue.Null,
_ => throw new InvalidOperationException($"Unsupported JsonValueKind: {element.ValueKind}")
};
}