diff --git a/src/Umbraco.Core/Serialization/IJsonSerializer.cs b/src/Umbraco.Core/Serialization/IJsonSerializer.cs
index 27bd956f41..54ac7aa02c 100644
--- a/src/Umbraco.Core/Serialization/IJsonSerializer.cs
+++ b/src/Umbraco.Core/Serialization/IJsonSerializer.cs
@@ -16,7 +16,6 @@ public interface IJsonSerializer
///
string Serialize(object? input);
-
///
/// Parses the text representing a single JSON value into an instance of the type specified by a generic type parameter.
///
diff --git a/src/Umbraco.Core/Serialization/IJsonSerializerEncoderFactory.cs b/src/Umbraco.Core/Serialization/IJsonSerializerEncoderFactory.cs
new file mode 100644
index 0000000000..43d096a2e8
--- /dev/null
+++ b/src/Umbraco.Core/Serialization/IJsonSerializerEncoderFactory.cs
@@ -0,0 +1,17 @@
+using System.Text.Encodings.Web;
+
+namespace Umbraco.Cms.Core.Serialization;
+
+///
+/// Provides a factory method for creating a for use in instantiating JSON serializers.
+///
+public interface IJsonSerializerEncoderFactory
+{
+ ///
+ /// Creates a for use in the serialization of configuration editor JSON.
+ ///
+ /// The type of the serializer for which the encoder is being created.
+ /// A instance.
+ JavaScriptEncoder CreateEncoder()
+ where TSerializer : IJsonSerializer;
+}
diff --git a/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.CoreServices.cs b/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.CoreServices.cs
index 8068b074fb..70e5969d04 100644
--- a/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.CoreServices.cs
+++ b/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.CoreServices.cs
@@ -127,6 +127,7 @@ public static partial class UmbracoBuilderExtensions
builder.Services.AddSingleton();
builder.Services.AddSingleton();
+ builder.Services.AddUnique();
builder.Services.AddUnique();
// register database builder
diff --git a/src/Umbraco.Infrastructure/Serialization/DefaultJsonSerializerEncoderFactory.cs b/src/Umbraco.Infrastructure/Serialization/DefaultJsonSerializerEncoderFactory.cs
new file mode 100644
index 0000000000..cf91b91f61
--- /dev/null
+++ b/src/Umbraco.Infrastructure/Serialization/DefaultJsonSerializerEncoderFactory.cs
@@ -0,0 +1,14 @@
+using System.Text.Encodings.Web;
+using System.Text.Unicode;
+using Umbraco.Cms.Core.Serialization;
+
+namespace Umbraco.Cms.Infrastructure.Serialization;
+
+///
+public sealed class DefaultJsonSerializerEncoderFactory : IJsonSerializerEncoderFactory
+{
+ ///
+ public JavaScriptEncoder CreateEncoder()
+ where TSerializer : IJsonSerializer
+ => JavaScriptEncoder.Create(UnicodeRanges.BasicLatin);
+}
diff --git a/src/Umbraco.Infrastructure/Serialization/SystemTextConfigurationEditorJsonSerializer.cs b/src/Umbraco.Infrastructure/Serialization/SystemTextConfigurationEditorJsonSerializer.cs
index 180687b1a4..98185d74a6 100644
--- a/src/Umbraco.Infrastructure/Serialization/SystemTextConfigurationEditorJsonSerializer.cs
+++ b/src/Umbraco.Infrastructure/Serialization/SystemTextConfigurationEditorJsonSerializer.cs
@@ -1,6 +1,8 @@
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Text.Json.Serialization.Metadata;
+using Microsoft.Extensions.DependencyInjection;
+using Umbraco.Cms.Core.DependencyInjection;
using Umbraco.Cms.Core.PropertyEditors;
using Umbraco.Cms.Core.Serialization;
@@ -14,11 +16,24 @@ public sealed class SystemTextConfigurationEditorJsonSerializer : SystemTextJson
///
/// Initializes a new instance of the class.
///
+ [Obsolete("Please use the constructor taking all parameters. Scheduled for removal in Umbraco 18.")]
public SystemTextConfigurationEditorJsonSerializer()
+ : this(
+ StaticServiceProvider.Instance.GetRequiredService())
+ {
+ }
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public SystemTextConfigurationEditorJsonSerializer(IJsonSerializerEncoderFactory jsonSerializerEncoderFactory)
+ : base(jsonSerializerEncoderFactory)
=> _jsonSerializerOptions = new JsonSerializerOptions()
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
+ Encoder = jsonSerializerEncoderFactory.CreateEncoder(),
+
// In some cases, configs aren't camel cased in the DB, so we have to resort to case insensitive
// property name resolving when creating configuration objects (deserializing DB configs).
PropertyNameCaseInsensitive = true,
@@ -40,6 +55,7 @@ public sealed class SystemTextConfigurationEditorJsonSerializer : SystemTextJson
.WithAddedModifier(UseAttributeConfiguredPropertyNames()),
};
+ ///
protected override JsonSerializerOptions JsonSerializerOptions => _jsonSerializerOptions;
///
diff --git a/src/Umbraco.Infrastructure/Serialization/SystemTextJsonSerializer.cs b/src/Umbraco.Infrastructure/Serialization/SystemTextJsonSerializer.cs
index 3edd4d2fc3..c363f5459b 100644
--- a/src/Umbraco.Infrastructure/Serialization/SystemTextJsonSerializer.cs
+++ b/src/Umbraco.Infrastructure/Serialization/SystemTextJsonSerializer.cs
@@ -1,5 +1,8 @@
using System.Text.Json;
using System.Text.Json.Serialization;
+using Microsoft.Extensions.DependencyInjection;
+using Umbraco.Cms.Core.DependencyInjection;
+using Umbraco.Cms.Core.Serialization;
namespace Umbraco.Cms.Infrastructure.Serialization;
@@ -8,13 +11,27 @@ public sealed class SystemTextJsonSerializer : SystemTextJsonSerializerBase
{
private readonly JsonSerializerOptions _jsonSerializerOptions;
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ [Obsolete("Please use the constructor taking all parameters. Scheduled for removal in Umbraco 18.")]
+ public SystemTextJsonSerializer()
+ : this(
+ StaticServiceProvider.Instance.GetRequiredService())
+ {
+ }
+
///
/// Initializes a new instance of the class.
///
- public SystemTextJsonSerializer()
+ public SystemTextJsonSerializer(IJsonSerializerEncoderFactory jsonSerializerEncoderFactory)
+ : base(jsonSerializerEncoderFactory)
=> _jsonSerializerOptions = new JsonSerializerOptions
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
+
+ Encoder = jsonSerializerEncoderFactory.CreateEncoder(),
+
Converters =
{
new JsonStringEnumConverter(),
@@ -25,5 +42,6 @@ public sealed class SystemTextJsonSerializer : SystemTextJsonSerializerBase
}
};
+ ///
protected override JsonSerializerOptions JsonSerializerOptions => _jsonSerializerOptions;
}
diff --git a/src/Umbraco.Infrastructure/Serialization/SystemTextJsonSerializerBase.cs b/src/Umbraco.Infrastructure/Serialization/SystemTextJsonSerializerBase.cs
index cfffb32a99..264a61eb91 100644
--- a/src/Umbraco.Infrastructure/Serialization/SystemTextJsonSerializerBase.cs
+++ b/src/Umbraco.Infrastructure/Serialization/SystemTextJsonSerializerBase.cs
@@ -1,6 +1,9 @@
-using System.Diagnostics.CodeAnalysis;
+using System.Diagnostics.CodeAnalysis;
+using System.Text.Encodings.Web;
using System.Text.Json;
using System.Text.Json.Nodes;
+using Microsoft.Extensions.DependencyInjection;
+using Umbraco.Cms.Core.DependencyInjection;
using Umbraco.Cms.Core.Serialization;
using Umbraco.Extensions;
@@ -8,6 +11,28 @@ namespace Umbraco.Cms.Infrastructure.Serialization;
public abstract class SystemTextJsonSerializerBase : IJsonSerializer
{
+ private readonly IJsonSerializerEncoderFactory _jsonSerializerEncoderFactory;
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ [Obsolete("Please use the constructor taking all parameters. Scheduled for removal in Umbraco 18.")]
+ protected SystemTextJsonSerializerBase()
+ : this(
+ StaticServiceProvider.Instance.GetRequiredService())
+ {
+ }
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The for creating the .
+ protected SystemTextJsonSerializerBase(IJsonSerializerEncoderFactory jsonSerializerEncoderFactory)
+ => _jsonSerializerEncoderFactory = jsonSerializerEncoderFactory;
+
+ ///
+ /// Gets the .
+ ///
protected abstract JsonSerializerOptions JsonSerializerOptions { get; }
///
diff --git a/src/Umbraco.Infrastructure/Serialization/SystemTextWebhookJsonSerializer.cs b/src/Umbraco.Infrastructure/Serialization/SystemTextWebhookJsonSerializer.cs
index b75c92073c..b4dc6a1c2b 100644
--- a/src/Umbraco.Infrastructure/Serialization/SystemTextWebhookJsonSerializer.cs
+++ b/src/Umbraco.Infrastructure/Serialization/SystemTextWebhookJsonSerializer.cs
@@ -1,5 +1,7 @@
-using System.Text.Json;
+using System.Text.Json;
using System.Text.Json.Serialization;
+using Microsoft.Extensions.DependencyInjection;
+using Umbraco.Cms.Core.DependencyInjection;
using Umbraco.Cms.Core.Serialization;
namespace Umbraco.Cms.Infrastructure.Serialization;
@@ -9,23 +11,38 @@ public sealed class SystemTextWebhookJsonSerializer : SystemTextJsonSerializerBa
{
private readonly JsonSerializerOptions _jsonSerializerOptions;
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ [Obsolete("Please use the constructor taking all parameters. Scheduled for removal in Umbraco 18.")]
+ public SystemTextWebhookJsonSerializer()
+ : this(
+ StaticServiceProvider.Instance.GetRequiredService())
+ {
+ }
+
///
/// Initializes a new instance of the class.
///
- public SystemTextWebhookJsonSerializer()
+ public SystemTextWebhookJsonSerializer(IJsonSerializerEncoderFactory jsonSerializerEncoderFactory)
+ : base(jsonSerializerEncoderFactory)
=> _jsonSerializerOptions = new JsonSerializerOptions()
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
+
+ Encoder = jsonSerializerEncoderFactory.CreateEncoder(),
+
Converters =
{
new JsonStringEnumConverter(),
new JsonUdiConverter(),
new JsonUdiRangeConverter(),
new JsonObjectConverter(), // Required for block editor values
- new JsonBlockValueConverter()
+ new JsonBlockValueConverter(),
},
TypeInfoResolver = new WebhookJsonTypeResolver(),
};
+ ///
protected override JsonSerializerOptions JsonSerializerOptions => _jsonSerializerOptions;
}
diff --git a/tests/Umbraco.TestData/UmbracoTestDataController.cs b/tests/Umbraco.TestData/UmbracoTestDataController.cs
index 9f10d992ed..3fd3754cc5 100644
--- a/tests/Umbraco.TestData/UmbracoTestDataController.cs
+++ b/tests/Umbraco.TestData/UmbracoTestDataController.cs
@@ -299,7 +299,7 @@ public class UmbracoTestDataController : SurfaceController
throw new InvalidOperationException($"No {editorAlias} editor found");
}
- var serializer = new SystemTextConfigurationEditorJsonSerializer();
+ var serializer = new SystemTextConfigurationEditorJsonSerializer(new DefaultJsonSerializerEncoderFactory());
dt = new DataType(editor, serializer)
{
diff --git a/tests/Umbraco.Tests.Common/Builders/DataTypeBuilder.cs b/tests/Umbraco.Tests.Common/Builders/DataTypeBuilder.cs
index 284e68592f..39b36b7ee1 100644
--- a/tests/Umbraco.Tests.Common/Builders/DataTypeBuilder.cs
+++ b/tests/Umbraco.Tests.Common/Builders/DataTypeBuilder.cs
@@ -138,7 +138,7 @@ public class DataTypeBuilder
var creatorId = _creatorId ?? 1;
var databaseType = _databaseType ?? ValueStorageType.Ntext;
var sortOrder = _sortOrder ?? 0;
- var serializer = new SystemTextConfigurationEditorJsonSerializer();
+ var serializer = new SystemTextConfigurationEditorJsonSerializer(new DefaultJsonSerializerEncoderFactory());
var dataType = new DataType(editor, serializer, parentId)
{
diff --git a/tests/Umbraco.Tests.Common/TestHelperBase.cs b/tests/Umbraco.Tests.Common/TestHelperBase.cs
index 8983887523..822be248ec 100644
--- a/tests/Umbraco.Tests.Common/TestHelperBase.cs
+++ b/tests/Umbraco.Tests.Common/TestHelperBase.cs
@@ -136,7 +136,7 @@ public abstract class TestHelperBase
}
}
- public IJsonSerializer JsonSerializer { get; } = new SystemTextJsonSerializer();
+ public IJsonSerializer JsonSerializer { get; } = new SystemTextJsonSerializer(new DefaultJsonSerializerEncoderFactory());
public IVariationContextAccessor VariationContextAccessor { get; } = new TestVariationContextAccessor();
diff --git a/tests/Umbraco.Tests.Common/TestHelpers/MockedValueEditors.cs b/tests/Umbraco.Tests.Common/TestHelpers/MockedValueEditors.cs
index 3051385ca1..1e82cd8e03 100644
--- a/tests/Umbraco.Tests.Common/TestHelpers/MockedValueEditors.cs
+++ b/tests/Umbraco.Tests.Common/TestHelpers/MockedValueEditors.cs
@@ -17,7 +17,7 @@ public class MockedValueEditors
return new DataValueEditor(
Mock.Of(),
- new SystemTextJsonSerializer(),
+ new SystemTextJsonSerializer(new DefaultJsonSerializerEncoderFactory()),
Mock.Of(),
new DataEditorAttribute(name) { ValueType = valueType });
}
diff --git a/tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/TemplateRepositoryTest.cs b/tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/TemplateRepositoryTest.cs
index bcef116a97..13c4db5c3f 100644
--- a/tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/TemplateRepositoryTest.cs
+++ b/tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/TemplateRepositoryTest.cs
@@ -261,7 +261,7 @@ internal sealed class TemplateRepositoryTest : UmbracoIntegrationTest
{
var templateRepository = CreateRepository(provider);
var globalSettings = new GlobalSettings();
- var serializer = new SystemTextJsonSerializer();
+ var serializer = new SystemTextJsonSerializer(new DefaultJsonSerializerEncoderFactory());
var tagRepository = new TagRepository(scopeAccessor, AppCaches.Disabled, LoggerFactory.CreateLogger());
var commonRepository =
new ContentTypeCommonRepository(scopeAccessor, templateRepository, AppCaches, ShortStringHelper);
diff --git a/tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/UserRepositoryTest.cs b/tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/UserRepositoryTest.cs
index b7c8f1ce3c..87c458621f 100644
--- a/tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/UserRepositoryTest.cs
+++ b/tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/UserRepositoryTest.cs
@@ -55,7 +55,7 @@ internal sealed class UserRepositoryTest : UmbracoIntegrationTest
Mappers,
Options.Create(GlobalSettings),
Options.Create(new UserPasswordConfigurationSettings()),
- new SystemTextJsonSerializer(),
+ new SystemTextJsonSerializer(new DefaultJsonSerializerEncoderFactory()),
mockRuntimeState.Object,
PermissionMappers);
return repository;
@@ -162,7 +162,7 @@ internal sealed class UserRepositoryTest : UmbracoIntegrationTest
Mock.Of(),
Options.Create(GlobalSettings),
Options.Create(new UserPasswordConfigurationSettings()),
- new SystemTextJsonSerializer(),
+ new SystemTextJsonSerializer(new DefaultJsonSerializerEncoderFactory()),
mockRuntimeState.Object,
PermissionMappers);
diff --git a/tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Scoping/ScopedRepositoryTests.cs b/tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Scoping/ScopedRepositoryTests.cs
index e7fb41baad..db41399984 100644
--- a/tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Scoping/ScopedRepositoryTests.cs
+++ b/tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Scoping/ScopedRepositoryTests.cs
@@ -324,7 +324,7 @@ internal sealed class ScopedRepositoryTests : UmbracoIntegrationTest
public class LocalServerMessenger : ServerMessengerBase
{
public LocalServerMessenger()
- : base(false, new SystemTextJsonSerializer())
+ : base(false, new SystemTextJsonSerializer(new DefaultJsonSerializerEncoderFactory()))
{
}
diff --git a/tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/ContentEventsTests.cs b/tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/ContentEventsTests.cs
index 4b35534de0..f993f70009 100644
--- a/tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/ContentEventsTests.cs
+++ b/tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/ContentEventsTests.cs
@@ -2089,7 +2089,7 @@ namespace Umbraco.Cms.Tests.Integration.Umbraco.Infrastructure.Services
internal sealed class LocalServerMessenger : ServerMessengerBase
{
public LocalServerMessenger()
- : base(false, new SystemTextJsonSerializer())
+ : base(false, new SystemTextJsonSerializer(new DefaultJsonSerializerEncoderFactory()))
{
}
diff --git a/tests/Umbraco.Tests.UnitTests/TestHelpers/PublishedSnapshotServiceTestBase.cs b/tests/Umbraco.Tests.UnitTests/TestHelpers/PublishedSnapshotServiceTestBase.cs
index 571b5929ea..88182e38b9 100644
--- a/tests/Umbraco.Tests.UnitTests/TestHelpers/PublishedSnapshotServiceTestBase.cs
+++ b/tests/Umbraco.Tests.UnitTests/TestHelpers/PublishedSnapshotServiceTestBase.cs
@@ -165,7 +165,7 @@
//
// protected static DataType[] GetDefaultDataTypes()
// {
-// var serializer = new SystemTextConfigurationEditorJsonSerializer();
+// var serializer = new SystemTextConfigurationEditorJsonSerializer(new DefaultConfigurationEditorJsonSerializerEncoderFactory());
//
// // create data types, property types and content types
// var dataType =
diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/DeliveryApi/ImageCropperValueConverterTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/DeliveryApi/ImageCropperValueConverterTests.cs
index dc77dedfd8..97304529fa 100644
--- a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/DeliveryApi/ImageCropperValueConverterTests.cs
+++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/DeliveryApi/ImageCropperValueConverterTests.cs
@@ -29,10 +29,10 @@ public class ImageCropperValueConverterTests : PropertyValueConverterTests
var publishedPropertyType = new Mock();
publishedPropertyType.SetupGet(p => p.DataType).Returns(publishedDataType);
- var valueConverter = new ImageCropperValueConverter(Mock.Of>(), new SystemTextJsonSerializer());
+ var valueConverter = new ImageCropperValueConverter(Mock.Of>(), new SystemTextJsonSerializer(new DefaultJsonSerializerEncoderFactory()));
Assert.AreEqual(typeof(ApiImageCropperValue), valueConverter.GetDeliveryApiPropertyValueType(publishedPropertyType.Object));
- var serializer = new SystemTextJsonSerializer();
+ var serializer = new SystemTextJsonSerializer(new DefaultJsonSerializerEncoderFactory());
var source = serializer.Serialize(new ImageCropperValue
{
Src = "/some/file.jpg",
diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/DeliveryApi/MediaPickerWithCropsValueConverterTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/DeliveryApi/MediaPickerWithCropsValueConverterTests.cs
index 2f43f51bd6..cad05ed653 100644
--- a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/DeliveryApi/MediaPickerWithCropsValueConverterTests.cs
+++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/DeliveryApi/MediaPickerWithCropsValueConverterTests.cs
@@ -16,7 +16,7 @@ public class MediaPickerWithCropsValueConverterTests : PropertyValueConverterTes
{
private MediaPickerWithCropsValueConverter MediaPickerWithCropsValueConverter()
{
- var serializer = new SystemTextJsonSerializer();
+ var serializer = new SystemTextJsonSerializer(new DefaultJsonSerializerEncoderFactory());
var publishedValueFallback = Mock.Of();
var apiUrlProvider = new ApiMediaUrlProvider(PublishedUrlProvider);
var apiMediaWithCropsBuilder = new ApiMediaWithCropsBuilder(
@@ -40,7 +40,7 @@ public class MediaPickerWithCropsValueConverterTests : PropertyValueConverterTes
var publishedPropertyType = SetupMediaPropertyType(false);
var mediaKey = SetupMedia("My media", ".jpg", 200, 400, "My alt text", 800);
- var serializer = new SystemTextJsonSerializer();
+ var serializer = new SystemTextJsonSerializer(new DefaultJsonSerializerEncoderFactory());
var valueConverter = MediaPickerWithCropsValueConverter();
Assert.AreEqual(typeof(IEnumerable), valueConverter.GetDeliveryApiPropertyValueType(publishedPropertyType));
@@ -84,7 +84,7 @@ public class MediaPickerWithCropsValueConverterTests : PropertyValueConverterTes
var mediaKey1 = SetupMedia("My media", ".jpg", 200, 400, "My alt text", 800);
var mediaKey2 = SetupMedia("My other media", ".png", 800, 600, "My other alt text", 200);
- var serializer = new SystemTextJsonSerializer();
+ var serializer = new SystemTextJsonSerializer(new DefaultJsonSerializerEncoderFactory());
var valueConverter = MediaPickerWithCropsValueConverter();
Assert.AreEqual(typeof(IEnumerable), valueConverter.GetDeliveryApiPropertyValueType(publishedPropertyType));
@@ -166,7 +166,7 @@ public class MediaPickerWithCropsValueConverterTests : PropertyValueConverterTes
};
var mediaKey = SetupMedia("Some media", ".123", 123, 456, "My alt text", 789, mediaCrops);
- var serializer = new SystemTextJsonSerializer();
+ var serializer = new SystemTextJsonSerializer(new DefaultJsonSerializerEncoderFactory());
var valueConverter = MediaPickerWithCropsValueConverter();
Assert.AreEqual(typeof(IEnumerable), valueConverter.GetDeliveryApiPropertyValueType(publishedPropertyType));
@@ -226,7 +226,7 @@ public class MediaPickerWithCropsValueConverterTests : PropertyValueConverterTes
};
var mediaKey = SetupMedia("Some media", ".123", 123, 456, "My alt text", 789, mediaCrops);
- var serializer = new SystemTextJsonSerializer();
+ var serializer = new SystemTextJsonSerializer(new DefaultJsonSerializerEncoderFactory());
var valueConverter = MediaPickerWithCropsValueConverter();
Assert.AreEqual(typeof(IEnumerable), valueConverter.GetDeliveryApiPropertyValueType(publishedPropertyType));
diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/DeliveryApi/MultiUrlPickerValueConverterTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/DeliveryApi/MultiUrlPickerValueConverterTests.cs
index 454aa358b4..03008704ae 100644
--- a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/DeliveryApi/MultiUrlPickerValueConverterTests.cs
+++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/DeliveryApi/MultiUrlPickerValueConverterTests.cs
@@ -306,5 +306,5 @@ public class MultiUrlPickerValueConverterTests : PropertyValueConverterTests
CacheManager.Media);
}
- private IJsonSerializer Serializer() => new SystemTextJsonSerializer();
+ private IJsonSerializer Serializer() => new SystemTextJsonSerializer(new DefaultJsonSerializerEncoderFactory());
}
diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/DeliveryApi/OutputExpansionStrategyTestBase.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/DeliveryApi/OutputExpansionStrategyTestBase.cs
index 0f6c3eb168..33f335d6e2 100644
--- a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/DeliveryApi/OutputExpansionStrategyTestBase.cs
+++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/DeliveryApi/OutputExpansionStrategyTestBase.cs
@@ -386,7 +386,7 @@ public abstract class OutputExpansionStrategyTestBase : PropertyValueConverterTe
var publishedValueFallback = Mock.Of();
var apiMediaWithCropsBuilder = new ApiMediaWithCropsBuilder(mediaBuilder, publishedValueFallback);
- MediaPickerWithCropsValueConverter mediaPickerValueConverter = new MediaPickerWithCropsValueConverter(CacheManager.Media, PublishedUrlProvider, publishedValueFallback, new SystemTextJsonSerializer(), apiMediaWithCropsBuilder);
+ MediaPickerWithCropsValueConverter mediaPickerValueConverter = new MediaPickerWithCropsValueConverter(CacheManager.Media, PublishedUrlProvider, publishedValueFallback, new SystemTextJsonSerializer(new DefaultJsonSerializerEncoderFactory()), apiMediaWithCropsBuilder);
var mediaPickerPropertyType = SetupPublishedPropertyType(mediaPickerValueConverter, propertyTypeAlias, Constants.PropertyEditors.Aliases.MediaPicker3, new MediaPicker3Configuration());
return new PublishedElementPropertyBase(mediaPickerPropertyType, parent, false, PropertyCacheLevel.None, VariationContext, CacheManager, new GuidUdi(Constants.UdiEntityType.Media, pickedMediaKey).ToString());
@@ -394,7 +394,7 @@ public abstract class OutputExpansionStrategyTestBase : PropertyValueConverterTe
internal PublishedElementPropertyBase CreateMediaPicker3Property(IPublishedElement parent, Guid pickedMediaKey, string propertyTypeAlias, IApiMediaBuilder mediaBuilder)
{
- var serializer = new SystemTextJsonSerializer();
+ var serializer = new SystemTextJsonSerializer(new DefaultJsonSerializerEncoderFactory());
var value = serializer.Serialize(new[]
{
new MediaPicker3PropertyEditor.MediaPicker3PropertyValueEditor.MediaWithCropsDto
@@ -406,7 +406,7 @@ public abstract class OutputExpansionStrategyTestBase : PropertyValueConverterTe
var publishedValueFallback = Mock.Of();
var apiMediaWithCropsBuilder = new ApiMediaWithCropsBuilder(mediaBuilder, publishedValueFallback);
- MediaPickerWithCropsValueConverter mediaPickerValueConverter = new MediaPickerWithCropsValueConverter(CacheManager.Media, PublishedUrlProvider, publishedValueFallback, new SystemTextJsonSerializer(), apiMediaWithCropsBuilder);
+ MediaPickerWithCropsValueConverter mediaPickerValueConverter = new MediaPickerWithCropsValueConverter(CacheManager.Media, PublishedUrlProvider, publishedValueFallback, new SystemTextJsonSerializer(new DefaultJsonSerializerEncoderFactory()), apiMediaWithCropsBuilder);
var mediaPickerPropertyType = SetupPublishedPropertyType(mediaPickerValueConverter, propertyTypeAlias, Constants.PropertyEditors.Aliases.MediaPicker3, new MediaPicker3Configuration());
return new PublishedElementPropertyBase(mediaPickerPropertyType, parent, false, PropertyCacheLevel.None, VariationContext, CacheManager, value);
diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Manifest/PackageManifestReaderTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Manifest/PackageManifestReaderTests.cs
index e1c52d075f..db23529c67 100644
--- a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Manifest/PackageManifestReaderTests.cs
+++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Manifest/PackageManifestReaderTests.cs
@@ -1,4 +1,4 @@
-using System.Text;
+using System.Text;
using System.Text.Json;
using System.Text.Json.Nodes;
using Microsoft.Extensions.FileProviders;
@@ -32,7 +32,7 @@ public class PackageManifestReaderTests
fileProviderFactoryMock.Setup(m => m.Create()).Returns(_fileProviderMock.Object);
_loggerMock = new Mock>();
- _reader = new AppPluginsPackageManifestReader(fileProviderFactoryMock.Object, new SystemTextJsonSerializer(), _loggerMock.Object);
+ _reader = new AppPluginsPackageManifestReader(fileProviderFactoryMock.Object, new SystemTextJsonSerializer(new DefaultJsonSerializerEncoderFactory()), _loggerMock.Object);
}
[Test]
diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Models/VariationTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Models/VariationTests.cs
index ec4204c5be..6f7049a6d0 100644
--- a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Models/VariationTests.cs
+++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Models/VariationTests.cs
@@ -637,14 +637,14 @@ public class VariationTests
attribute,
Mock.Of(),
Mock.Of(),
- new SystemTextJsonSerializer(),
+ new SystemTextJsonSerializer(new DefaultJsonSerializerEncoderFactory()),
Mock.Of()));
var textBoxEditor = new TextboxPropertyEditor(
dataValueEditorFactory,
ioHelper);
- var serializer = new SystemTextConfigurationEditorJsonSerializer();
+ var serializer = new SystemTextConfigurationEditorJsonSerializer(new DefaultJsonSerializerEncoderFactory());
var mockDataTypeService = new Mock();
Mock.Get(dataTypeService).Setup(x => x.GetDataType(It.Is(y => y == Constants.DataTypes.Textbox)))
diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/BlockEditorComponentTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/BlockEditorComponentTests.cs
index 719c0885c8..5cbe05aebb 100644
--- a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/BlockEditorComponentTests.cs
+++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/BlockEditorComponentTests.cs
@@ -22,7 +22,7 @@ public class BlockEditorComponentTests
private const string SubContentGuid2 = "68606a64-a03a-4b78-bcb1-39daee0c590d";
private const string SubSettingsGuid1 = "5ce1b7da-7c9f-491e-9b95-5510fd28c50c";
- private readonly IJsonSerializer _jsonSerializer = new SystemTextJsonSerializer();
+ private readonly IJsonSerializer _jsonSerializer = new SystemTextJsonSerializer(new DefaultJsonSerializerEncoderFactory());
[Test]
public void Cannot_Have_Null_Udi()
diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/BlockGridPropertyValueConverterTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/BlockGridPropertyValueConverterTests.cs
index 8f88564599..72aa111082 100644
--- a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/BlockGridPropertyValueConverterTests.cs
+++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/BlockGridPropertyValueConverterTests.cs
@@ -1,4 +1,4 @@
-using Moq;
+using Moq;
using NUnit.Framework;
using Umbraco.Cms.Core;
using Umbraco.Cms.Core.DeliveryApi;
@@ -191,7 +191,7 @@ public class BlockGridPropertyValueConverterTests : BlockPropertyValueConverterT
var editor = new BlockGridPropertyValueConverter(
Mock.Of(),
new BlockEditorConverter(GetPublishedContentTypeCache(), Mock.Of(), publishedModelFactory, Mock.Of(), blockVarianceHandler),
- new SystemTextJsonSerializer(),
+ new SystemTextJsonSerializer(new DefaultJsonSerializerEncoderFactory()),
new ApiElementBuilder(Mock.Of()),
new BlockGridPropertyValueConstructorCache(),
Mock.Of(),
diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/BlockListEditorPropertyValueEditorTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/BlockListEditorPropertyValueEditorTests.cs
index 32655e88b2..6759daece2 100644
--- a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/BlockListEditorPropertyValueEditorTests.cs
+++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/BlockListEditorPropertyValueEditorTests.cs
@@ -235,7 +235,7 @@ public class BlockListEditorPropertyValueEditorTests
It.IsAny>()))
.Returns((string key, string alias, CultureInfo culture, IDictionary args) => $"{key}_{alias}");
- var jsonSerializer = new SystemTextJsonSerializer();
+ var jsonSerializer = new SystemTextJsonSerializer(new DefaultJsonSerializerEncoderFactory());
var languageService = Mock.Of();
var dataValueEditorFactoryMock = new Mock();
@@ -248,7 +248,7 @@ public class BlockListEditorPropertyValueEditorTests
.Setup(x => x.Create(It.IsAny