Add support for controlling when to serialize properties of type IActivity

This commit is contained in:
Sipke Schoorstra 2023-03-08 01:03:01 +01:00
parent e6ce1cebb3
commit 7ba4dc5039
3 changed files with 7 additions and 4 deletions

View file

@ -43,7 +43,7 @@ public abstract class Composite : Activity, IVariableContainer
/// </summary>
[Port]
[Browsable(false)]
//[JsonExpandable] // Composite activities' Root is intended to be constructed from code only.
[JsonExpandable] // Composite activities' Root is intended to be constructed from code only.
public IActivity Root { get; set; } = new Sequence();
/// <inheritdoc />

View file

@ -22,13 +22,14 @@ public class JsonExpandableConverter<T> : JsonConverter<T>
{
writer.WriteStartObject();
var properties = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
var properties = value?.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance) ?? Array.Empty<PropertyInfo>();
var newOptions = new JsonSerializerOptions(options);
newOptions.Converters.RemoveWhere(x => x is JsonExpandableConverterFactory<T>);
foreach (var property in properties)
{
if (property.GetCustomAttribute<JsonIgnoreAttribute>() != null)
continue;
if (property.GetCustomAttribute<JsonExpandableAttribute>() != null)
continue;

View file

@ -1,6 +1,7 @@
using System.ComponentModel;
using Elsa.Common.Models;
using Elsa.Extensions;
using Elsa.Workflows.Core.Attributes;
using Elsa.Workflows.Core.Contracts;
using Elsa.Workflows.Core.Models;
using Elsa.Workflows.Core.Services;
@ -20,6 +21,7 @@ public class WorkflowDefinitionActivity : Activity, IInitializable
/// <summary>
/// The activity to schedule for execution.
/// </summary>
[JsonExpandable]
public IActivity Root { get; set; } = default!;
/// <summary>