diff --git a/src/Ramstack.HtmxToolkit/HtmxConfig.cs b/src/Ramstack.HtmxToolkit/HtmxConfig.cs
index 721c014..2c3f229 100644
--- a/src/Ramstack.HtmxToolkit/HtmxConfig.cs
+++ b/src/Ramstack.HtmxToolkit/HtmxConfig.cs
@@ -19,4 +19,12 @@ public abstract class HtmxConfig
/// The target major version of HTMX that this configuration applies to.
internal HtmxConfig(HtmxTargetVersion version) =>
TargetVersion = version;
+
+ ///
+ /// Serializes this configuration to JSON.
+ ///
+ ///
+ /// A string containing this configuration serialized as JSON.
+ ///
+ internal abstract string ToJson();
}
diff --git a/src/Ramstack.HtmxToolkit/HtmxV1Config.cs b/src/Ramstack.HtmxToolkit/HtmxV1Config.cs
index f6cdd65..bac0afa 100644
--- a/src/Ramstack.HtmxToolkit/HtmxV1Config.cs
+++ b/src/Ramstack.HtmxToolkit/HtmxV1Config.cs
@@ -1,3 +1,4 @@
+using System.Text.Json;
using System.Text.Json.Serialization;
namespace Ramstack.HtmxToolkit;
@@ -197,4 +198,8 @@ public sealed class HtmxV1Config() : HtmxConfig(HtmxTargetVersion.V1)
[JsonPropertyName("triggerSpecsCache")]
[JsonConverter(typeof(HtmxTriggerSpecsCacheJsonConverter))]
public bool? TriggerSpecsCacheEnabled { get; set; }
+
+ ///
+ internal override string ToJson() =>
+ JsonSerializer.Serialize(this, HtmxConfigJsonSerializerContext.Default.HtmxV1Config);
}
diff --git a/src/Ramstack.HtmxToolkit/HtmxV2Config.cs b/src/Ramstack.HtmxToolkit/HtmxV2Config.cs
index a743a60..1789c60 100644
--- a/src/Ramstack.HtmxToolkit/HtmxV2Config.cs
+++ b/src/Ramstack.HtmxToolkit/HtmxV2Config.cs
@@ -1,3 +1,4 @@
+using System.Text.Json;
using System.Text.Json.Serialization;
using Ramstack.HtmxToolkit.TagHelpers;
@@ -229,4 +230,8 @@ public sealed class HtmxV2Config() : HtmxConfig(HtmxTargetVersion.V2)
/// Defaults to .
///
public bool? ReportValidityOfForms { get; set; }
+
+ ///
+ internal override string ToJson() =>
+ JsonSerializer.Serialize(this, HtmxConfigJsonSerializerContext.Default.HtmxV2Config);
}
diff --git a/src/Ramstack.HtmxToolkit/HtmxV4Config.cs b/src/Ramstack.HtmxToolkit/HtmxV4Config.cs
index ecf2b28..cd5756b 100644
--- a/src/Ramstack.HtmxToolkit/HtmxV4Config.cs
+++ b/src/Ramstack.HtmxToolkit/HtmxV4Config.cs
@@ -1,3 +1,4 @@
+using System.Text.Json;
using System.Text.Json.Serialization;
namespace Ramstack.HtmxToolkit;
@@ -145,4 +146,8 @@ public sealed class HtmxV4Config() : HtmxConfig(HtmxTargetVersion.V4)
/// at runtime and supports wildcard patterns such as "4xx" and "44x".
///
public string[]? NoSwap { get; set; }
+
+ ///
+ internal override string ToJson() =>
+ JsonSerializer.Serialize(this, HtmxConfigJsonSerializerContext.Default.HtmxV4Config);
}
diff --git a/src/Ramstack.HtmxToolkit/TagHelpers/HtmxConfigTagHelper.cs b/src/Ramstack.HtmxToolkit/TagHelpers/HtmxConfigTagHelper.cs
index c32c924..1a020b2 100644
--- a/src/Ramstack.HtmxToolkit/TagHelpers/HtmxConfigTagHelper.cs
+++ b/src/Ramstack.HtmxToolkit/TagHelpers/HtmxConfigTagHelper.cs
@@ -1,5 +1,3 @@
-using System.Text.Json;
-
using Microsoft.AspNetCore.Antiforgery;
using Microsoft.AspNetCore.Html;
using Microsoft.AspNetCore.Mvc.Rendering;
@@ -40,12 +38,7 @@ public override Task ProcessAsync(TagHelperContext context, TagHelperOutput outp
output.TagMode = TagMode.SelfClosing;
output.Attributes.SetAttribute("name", "htmx-config");
- var json = options.Value.HtmxConfig switch
- {
- HtmxV1Config value => JsonSerializer.Serialize(value, HtmxConfigJsonSerializerContext.Default.HtmxV1Config),
- HtmxV2Config value => JsonSerializer.Serialize(value, HtmxConfigJsonSerializerContext.Default.HtmxV2Config),
- var value => JsonSerializer.Serialize((HtmxV4Config)value, HtmxConfigJsonSerializerContext.Default.HtmxV4Config)
- };
+ var json = options.Value.HtmxConfig.ToJson();
output.Attributes.SetAttribute(
new TagHelperAttribute("content", new HtmlString(json), HtmlAttributeValueStyle.SingleQuotes));