Fix JsonNetSerializer settings leaking into derived implementations (#14814)

* Change settings static field to instance property

* Rename property to Settings
This commit is contained in:
Ronald Barendse
2023-10-31 12:18:51 +01:00
committed by GitHub
parent 8e7831f4b8
commit 7677708917
2 changed files with 6 additions and 11 deletions

View File

@@ -10,10 +10,8 @@ public class ConfigurationEditorJsonSerializer : JsonNetSerializer, IConfigurati
{
public ConfigurationEditorJsonSerializer()
{
JsonSerializerSettings.Converters.Add(new FuzzyBooleanConverter());
JsonSerializerSettings.ContractResolver = new ConfigurationCustomContractResolver();
JsonSerializerSettings.Formatting = Formatting.None;
JsonSerializerSettings.NullValueHandling = NullValueHandling.Ignore;
Settings.Converters.Add(new FuzzyBooleanConverter());
Settings.ContractResolver = new ConfigurationCustomContractResolver();
}
private class ConfigurationCustomContractResolver : DefaultContractResolver

View File

@@ -7,23 +7,20 @@ namespace Umbraco.Cms.Infrastructure.Serialization;
public class JsonNetSerializer : IJsonSerializer
{
protected static readonly JsonSerializerSettings JsonSerializerSettings = new()
protected JsonSerializerSettings Settings { get; } = new()
{
Converters = new List<JsonConverter> { new StringEnumConverter() },
Formatting = Formatting.None,
NullValueHandling = NullValueHandling.Ignore,
};
public string Serialize(object? input) => JsonConvert.SerializeObject(input, JsonSerializerSettings);
public string Serialize(object? input) => JsonConvert.SerializeObject(input, Settings);
public T? Deserialize<T>(string input) => JsonConvert.DeserializeObject<T>(input, JsonSerializerSettings);
public T? Deserialize<T>(string input) => JsonConvert.DeserializeObject<T>(input, Settings);
public T? DeserializeSubset<T>(string input, string key)
{
if (key == null)
{
throw new ArgumentNullException(nameof(key));
}
ArgumentNullException.ThrowIfNull(key);
JObject? root = Deserialize<JObject>(input);
JToken? jToken = root?.SelectToken(key);