diff --git a/src/MiniProfiler.Shared/Internal/ExtensionMethods.cs b/src/MiniProfiler.Shared/Internal/ExtensionMethods.cs index 2b5a6b0d..7c86eb54 100644 --- a/src/MiniProfiler.Shared/Internal/ExtensionMethods.cs +++ b/src/MiniProfiler.Shared/Internal/ExtensionMethods.cs @@ -7,6 +7,7 @@ using Newtonsoft.Json; using Newtonsoft.Json.Serialization; #elif STJSON +using System.Text.Encodings.Web; using System.Text.Json; using System.Text.Json.Serialization; #endif @@ -134,6 +135,13 @@ public static string ToJson(this List? guids) private static readonly JsonSerializerOptions defaultSettings = new() { DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, + Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping, + }; + + private static readonly JsonSerializerOptions htmlEscapeSettings = new() + { + DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, + Encoder = JavaScriptEncoder.Default, }; /// @@ -142,10 +150,9 @@ public static string ToJson(this List? guids) /// The to serialize. /// Whether to HTML escape the output. [return: NotNullIfNotNull(nameof(profiler))] - [SuppressMessage("Style", "IDE0060:Remove unused parameter", Justification = "Compatibility across versions")] public static string? ToJson(this MiniProfiler? profiler, bool htmlEscape = false) => profiler != default - ? JsonSerializer.Serialize(profiler, defaultSettings) + ? JsonSerializer.Serialize(profiler, htmlEscape ? htmlEscapeSettings : defaultSettings) : null; ///