diff --git a/test/Core.Test/Utilities/HtmlEncodingStringConverterTests.cs b/test/Core.Test/Utilities/HtmlEncodingStringConverterTests.cs
new file mode 100644
index 0000000000..0d0cffb79d
--- /dev/null
+++ b/test/Core.Test/Utilities/HtmlEncodingStringConverterTests.cs
@@ -0,0 +1,89 @@
+using System.Text.Json;
+using System.Text.Json.Serialization;
+using Bit.Core.Utilities;
+using Xunit;
+
+namespace Bit.Core.Test.Utilities;
+
+public class HtmlEncodingStringConverterTests
+{
+ [Fact]
+ public void Serialize_WhenEncodedValueIsNotNull_SerializesHtmlEncodedString()
+ {
+ // Arrange
+ var obj = new HtmlEncodedString
+ {
+ EncodedValue = "This is <b>bold</b>",
+ NonEncodedValue = "This is bold"
+ };
+
+ // This is necessary to prevent the serializer from double encoding the string
+ var serializerOptions = new JsonSerializerOptions
+ {
+ Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping,
+ };
+
+ // Act
+ var jsonString = JsonSerializer.Serialize(obj, serializerOptions);
+
+ // Assert
+ const string expected = "{\"EncodedValue\":\"This is bold\",\"NonEncodedValue\":\"This is bold\"}";
+ Assert.Equal(expected, jsonString);
+ }
+
+ [Fact]
+ public void Serialize_WhenEncodedValueIsNull_SerializesNull()
+ {
+ // Arrange
+ var obj = new HtmlEncodedString
+ {
+ EncodedValue = null,
+ NonEncodedValue = null
+ };
+
+ // Act
+ var jsonString = JsonSerializer.Serialize(obj);
+
+ // Assert
+ const string expected = "{\"EncodedValue\":null,\"NonEncodedValue\":null}";
+ Assert.Equal(expected, jsonString);
+ }
+
+ [Fact]
+ public void Deserialize_WhenJsonContainsHtmlEncodedString_ReturnsDecodedString()
+ {
+ // Arrange
+ const string json = "{\"EncodedValue\":\"This is bold\",\"NonEncodedValue\":\"This is bold\"}";
+
+ // Act
+ var obj = JsonSerializer.Deserialize(json);
+
+ // Assert
+ const string expectedEncodedValue = "This is <b>bold</b>";
+ const string expectedNonEncodedValue = "This is bold";
+ Assert.Equal(expectedEncodedValue, obj.EncodedValue);
+ Assert.Equal(expectedNonEncodedValue, obj.NonEncodedValue);
+ }
+
+ [Fact]
+ public void Deserialize_WhenJsonContainsNull_ReturnsNull()
+ {
+ // Arrange
+ const string json = "{\"EncodedValue\":null,\"NonEncodedValue\":null}";
+
+ // Act
+ var obj = JsonSerializer.Deserialize(json);
+
+ // Assert
+ Assert.Null(obj.EncodedValue);
+ Assert.Null(obj.NonEncodedValue);
+ }
+}
+
+public class HtmlEncodedString
+{
+ [JsonConverter(typeof(HtmlEncodingStringConverter))]
+ public string EncodedValue { get; set; }
+
+ public string NonEncodedValue { get; set; }
+}