From bbfbba53cecbb45bed98ce78f9739cf9b49b37f6 Mon Sep 17 00:00:00 2001 From: Peter Davis Date: Mon, 18 Nov 2019 17:37:33 +1030 Subject: [PATCH] Fix issue with property expressions throwing invalid cast exceptions (#173) Expression was returning the JValue of the property and was unable to convert to a string. --- .../Services/JavaScriptExpressionEvaluator.cs | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/scripting/Elsa.Scripting.JavaScript/Services/JavaScriptExpressionEvaluator.cs b/src/scripting/Elsa.Scripting.JavaScript/Services/JavaScriptExpressionEvaluator.cs index a41a1ebf3..189cc0489 100644 --- a/src/scripting/Elsa.Scripting.JavaScript/Services/JavaScriptExpressionEvaluator.cs +++ b/src/scripting/Elsa.Scripting.JavaScript/Services/JavaScriptExpressionEvaluator.cs @@ -13,6 +13,7 @@ using Jint; using Jint.Native; using MediatR; using Newtonsoft.Json; +using Newtonsoft.Json.Linq; using NodaTime; using NodaTime.Serialization.JsonNet; @@ -34,7 +35,7 @@ namespace Elsa.Scripting.JavaScript.Services { this.mediator = mediator; this.mapper = mapper; - + serializerSettings = new JsonSerializerSettings().ConfigureForNodaTime(DateTimeZoneProviders.Tzdb); serializerSettings.Converters.Add(new TruncatingNumberJsonConverter()); } @@ -117,13 +118,18 @@ namespace Elsa.Scripting.JavaScript.Services { var obj = value.AsObject().ToObject(); - if (obj is ExpandoObject) + switch (obj) { - var json = JsonConvert.SerializeObject(obj, serializerSettings); - return JsonConvert.DeserializeObject(json, targetType, serializerSettings); + case ExpandoObject _: + { + var json = JsonConvert.SerializeObject(obj, serializerSettings); + return JsonConvert.DeserializeObject(json, targetType, serializerSettings); + } + case JValue jValue: + return jValue.Value; + default: + return obj; } - - return obj; } throw new ArgumentException($"Value type {value.Type} is not supported.", nameof(value));