From df027b61ca15d3d2b493949e28709f604af276ce Mon Sep 17 00:00:00 2001 From: Behzad Alizadeh Date: Wed, 10 Dec 2025 12:37:15 +0330 Subject: [PATCH] Normalize NextPageData & CurrentPageData formatting --- .../Models/WorkflowModel.cs | 9 ++- .../Utility/ConversionExtensions.cs | 78 +++++++++++++++---- .../Controllers/HomeController.cs | 4 +- .../Controllers/TransferController.cs | 6 +- .../Models/Test/WorkflowModel.cs | 8 +- 5 files changed, 78 insertions(+), 27 deletions(-) diff --git a/Caspian.WorkflowFramework.Package/Models/WorkflowModel.cs b/Caspian.WorkflowFramework.Package/Models/WorkflowModel.cs index 668ed30..2413314 100644 --- a/Caspian.WorkflowFramework.Package/Models/WorkflowModel.cs +++ b/Caspian.WorkflowFramework.Package/Models/WorkflowModel.cs @@ -1,9 +1,10 @@ -using System; +using JetBrains.Annotations; +using System; using System.Collections.Generic; using System.Linq; using System.Text; +using System.Text.Json; using System.Threading.Tasks; -using JetBrains.Annotations; namespace Caspian.WorkflowFramework.Models { @@ -33,7 +34,7 @@ namespace Caspian.WorkflowFramework.Models /// /// داده صفحه جاری /// - public string? CurrentPageData { get; set; } + public JsonElement? CurrentPageData { get; set; } /// /// داده صفحه بعد @@ -41,7 +42,7 @@ namespace Caspian.WorkflowFramework.Models /// فعلا استفاده ای نداریم /// /// - public string? NextPageData { get; set; } + public JsonElement? NextPageData { get; set; } /// /// آدرس صفحه بعدی diff --git a/Caspian.WorkflowFramework.Package/Utility/ConversionExtensions.cs b/Caspian.WorkflowFramework.Package/Utility/ConversionExtensions.cs index eedf6c3..cb472ab 100644 --- a/Caspian.WorkflowFramework.Package/Utility/ConversionExtensions.cs +++ b/Caspian.WorkflowFramework.Package/Utility/ConversionExtensions.cs @@ -1,9 +1,11 @@ -using System; +using Caspian.WorkflowFramework.Models; +using System; 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; namespace Caspian.WorkflowFramework.Utility { @@ -33,21 +35,67 @@ namespace Caspian.WorkflowFramework.Utility ? 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; + //CurrentPageData + 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; - //workflowModel.NextPageData = dictionary.ContainsKey(nameof(workflowModel.NextPageData)) - // ? (object?)dictionary[nameof(workflowModel.NextPageData)] - // : null; - - workflowModel.NextPageData = dictionary.ContainsKey(nameof(workflowModel.NextPageData)) - ? dictionary[nameof(workflowModel.NextPageData)]?.ToString() - : null; + case string s: + // اگر به صورت string JSON ذخیره شده + workflowModel.CurrentPageData = JsonSerializer.Deserialize(s); + break; + + default: + // هر نوع دیگری: serialize و تبدیل به JsonElement + workflowModel.CurrentPageData = JsonSerializer.SerializeToElement(currentPageDataObj); + break; + } + } + else + { + workflowModel.CurrentPageData = null; + } + + //NextPageData + if (dictionary.TryGetValue(nameof(workflowModel.NextPageData), out var nextPageDataObj) && + nextPageDataObj is not null) + { + switch (nextPageDataObj) + { + case JsonElement je: + workflowModel.NextPageData = je; + break; + + case JsonNode node: + // .NET 6+ + workflowModel.NextPageData = JsonSerializer.SerializeToElement(node); + break; + + case string s: + // اگر به صورت string JSON ذخیره شده + workflowModel.NextPageData = JsonSerializer.Deserialize(s); + break; + + default: + // هر نوع دیگری: serialize و تبدیل به JsonElement + workflowModel.NextPageData = JsonSerializer.SerializeToElement(nextPageDataObj); + break; + } + } + else + { + workflowModel.NextPageData = null; + } workflowModel.NextPageUrl = dictionary.ContainsKey(nameof(workflowModel.NextPageUrl)) ? dictionary[nameof(workflowModel.NextPageUrl)]?.ToString() diff --git a/SampleWorkflowWeb/Controllers/HomeController.cs b/SampleWorkflowWeb/Controllers/HomeController.cs index 064ff5c..4ea21a7 100644 --- a/SampleWorkflowWeb/Controllers/HomeController.cs +++ b/SampleWorkflowWeb/Controllers/HomeController.cs @@ -114,7 +114,7 @@ public class HomeController : Controller, ILoggable { EventName = input.PageEventName, WorkflowInstanceId = input.WorkflowId, - EventData = JsonConvert.SerializeObject(input) + EventData = System.Text.Json.JsonSerializer.SerializeToElement(input) }; var response = await _workflowService.PublishEventAsync(publishModel); @@ -173,7 +173,7 @@ public class HomeController : Controller, ILoggable { EventName = input.PageEventName, WorkflowInstanceId = input.WorkflowId, - EventData = JsonConvert.SerializeObject(input) + EventData = System.Text.Json.JsonSerializer.SerializeToElement(input) }; var response = await _workflowService.PublishEventAsync(publishEventModel); diff --git a/SampleWorkflowWeb/Controllers/TransferController.cs b/SampleWorkflowWeb/Controllers/TransferController.cs index 9fdf6c9..0df35e1 100644 --- a/SampleWorkflowWeb/Controllers/TransferController.cs +++ b/SampleWorkflowWeb/Controllers/TransferController.cs @@ -98,7 +98,7 @@ namespace SampleWorkflowWeb.Controllers { EventName = input.PageEventName, WorkflowInstanceId = input.WorkflowId, - EventData = JsonConvert.SerializeObject(input) + EventData = System.Text.Json.JsonSerializer.SerializeToElement(input) }; var response = await _workflowService.PublishEventAsync(publishModel); @@ -189,7 +189,7 @@ namespace SampleWorkflowWeb.Controllers { EventName = input.PageEventName, WorkflowInstanceId = input.WorkflowId, - EventData = JsonConvert.SerializeObject(input) + EventData = System.Text.Json.JsonSerializer.SerializeToElement(input) }; var response = await _workflowService.PublishEventAsync(publishModel); @@ -258,7 +258,7 @@ namespace SampleWorkflowWeb.Controllers { EventName = input.PageEventName, WorkflowInstanceId = input.WorkflowId, - EventData = JsonConvert.SerializeObject(input) + EventData = System.Text.Json.JsonSerializer.SerializeToElement(input) }; var response = await _workflowService.PublishEventAsync(publishModel); diff --git a/SampleWorkflowWeb/Models/Test/WorkflowModel.cs b/SampleWorkflowWeb/Models/Test/WorkflowModel.cs index 339527e..9bbab19 100644 --- a/SampleWorkflowWeb/Models/Test/WorkflowModel.cs +++ b/SampleWorkflowWeb/Models/Test/WorkflowModel.cs @@ -1,4 +1,6 @@ -namespace SampleWorkflowWeb.Models +using System.Text.Json; + +namespace SampleWorkflowWeb.Models { public class WorkflowModel { @@ -28,7 +30,7 @@ /// /// داده صفحه جاری /// - public string? CurrentPageData { get; set; } + public JsonElement? CurrentPageData { get; set; } /// /// داده صفحه بعد @@ -36,7 +38,7 @@ /// فعلا استفاده ای نداریم /// /// - public string? NextPageData { get; set; } + public JsonElement? NextPageData { get; set; } /// /// آدرس صفحه بعدی