diff --git a/src/apps/Caspian.WorkflowFramework/Models/WorkflowModel.cs b/src/apps/Caspian.WorkflowFramework/Models/WorkflowModel.cs index 36fadfe..33b8cf2 100644 --- a/src/apps/Caspian.WorkflowFramework/Models/WorkflowModel.cs +++ b/src/apps/Caspian.WorkflowFramework/Models/WorkflowModel.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Text.Json; using System.Threading.Tasks; using JetBrains.Annotations; @@ -32,7 +33,7 @@ public class WorkflowModel /// /// داده صفحه جاری /// - public string? CurrentPageData { get; set; } + public JsonElement? CurrentPageData { get; set; } /// /// داده صفحه بعد diff --git a/src/apps/Caspian.WorkflowFramework/Utility/ConversionExtensions.cs b/src/apps/Caspian.WorkflowFramework/Utility/ConversionExtensions.cs index b917ae1..27f65a6 100644 --- a/src/apps/Caspian.WorkflowFramework/Utility/ConversionExtensions.cs +++ b/src/apps/Caspian.WorkflowFramework/Utility/ConversionExtensions.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Text.Json; +using System.Text.Json.Nodes; using System.Threading.Tasks; using Caspian.WorkflowFramework.Models; @@ -32,13 +34,39 @@ public static class ConversionExtensions ? long.TryParse(dictionary[nameof(workflowModel.UserId)]?.ToString(), out var userId) ? userId : (long?)null : null; - //workflowModel.CurrentPageData = dictionary.ContainsKey(nameof(workflowModel.CurrentPageData)) - // ? (object?)dictionary[nameof(workflowModel.CurrentPageData)] - // : null; + if (dictionary.TryGetValue(nameof(workflowModel.CurrentPageData), out var currentPageDataObj) && + currentPageDataObj is not null) + { + switch (currentPageDataObj) + { + case JsonElement je: + workflowModel.CurrentPageData = je; + break; - workflowModel.CurrentPageData = dictionary.ContainsKey(nameof(workflowModel.CurrentPageData)) - ? dictionary[nameof(workflowModel.CurrentPageData)]?.ToString() - : null; + case JsonNode node: + // .NET 6+ + workflowModel.CurrentPageData = JsonSerializer.SerializeToElement(node); + break; + + case string s: + // اگر به صورت string JSON ذخیره شده + workflowModel.CurrentPageData = JsonSerializer.Deserialize(s); + break; + + default: + // هر نوع دیگری: serialize و تبدیل به JsonElement + workflowModel.CurrentPageData = JsonSerializer.SerializeToElement(currentPageDataObj); + break; + } + } + else + { + workflowModel.CurrentPageData = null; + } + + //workflowModel.CurrentPageData = dictionary.ContainsKey(nameof(workflowModel.CurrentPageData)) + // ? dictionary[nameof(workflowModel.CurrentPageData)]?.ToString() + // : null; //workflowModel.NextPageData = dictionary.ContainsKey(nameof(workflowModel.NextPageData)) // ? (object?)dictionary[nameof(workflowModel.NextPageData)]