Merge branch 'v8/8.17' into v9/feature/merge_v8.17-rc

This commit is contained in:
Ronald Barendse
2021-09-07 12:10:58 +02:00
335 changed files with 9119 additions and 2275 deletions

View File

@@ -1,7 +1,8 @@
using System.Collections.Generic;
using System.Runtime.Serialization;
using MessagePack;
using Newtonsoft.Json;
using Umbraco.Cms.Infrastructure.Serialization;
using System.Runtime.Serialization;
namespace Umbraco.Cms.Infrastructure.PublishedCache.DataSource
{
@@ -16,11 +17,13 @@ namespace Umbraco.Cms.Infrastructure.PublishedCache.DataSource
[DataMember(Order = 0)]
[JsonProperty("pd")]
[JsonConverter(typeof(AutoInterningStringKeyCaseInsensitiveDictionaryConverter<PropertyData[]>))]
[MessagePackFormatter(typeof(MessagePackAutoInterningStringKeyCaseInsensitiveDictionaryFormatter<PropertyData[]>))]
public Dictionary<string, PropertyData[]> PropertyData { get; set; }
[DataMember(Order = 1)]
[JsonProperty("cd")]
[JsonConverter(typeof(AutoInterningStringKeyCaseInsensitiveDictionaryConverter<CultureVariation>))]
[MessagePackFormatter(typeof(MessagePackAutoInterningStringKeyCaseInsensitiveDictionaryFormatter<CultureVariation>))]
public Dictionary<string, CultureVariation> CultureData { get; set; }
[DataMember(Order = 2)]

View File

@@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using MessagePack;
using MessagePack.Formatters;
namespace Umbraco.Cms.Infrastructure.PublishedCache.DataSource
{
/// <summary>
/// A MessagePack formatter (deserializer) for a string key dictionary that uses <see cref="StringComparer.OrdinalIgnoreCase" /> for the key string comparison.
/// </summary>
/// <typeparam name="TValue">The type of the value.</typeparam>
/// <seealso cref="DictionaryFormatterBase&lt;string, TValue, Dictionary&lt;string, TValue&gt;, Dictionary&lt;string, TValue&gt;.Enumerator, Dictionary&lt;string, TValue&gt;&gt;" />
public sealed class MessagePackAutoInterningStringKeyCaseInsensitiveDictionaryFormatter<TValue> : DictionaryFormatterBase<string, TValue, Dictionary<string, TValue>, Dictionary<string, TValue>.Enumerator, Dictionary<string, TValue>>
{
protected override void Add(Dictionary<string, TValue> collection, int index, string key, TValue value, MessagePackSerializerOptions options)
{
string.Intern(key);
collection.Add(key, value);
}
protected override Dictionary<string, TValue> Complete(Dictionary<string, TValue> intermediateCollection) => intermediateCollection;
protected override Dictionary<string, TValue>.Enumerator GetSourceEnumerator(Dictionary<string, TValue> source) => source.GetEnumerator();
protected override Dictionary<string, TValue> Create(int count, MessagePackSerializerOptions options) => new Dictionary<string, TValue>(count, StringComparer.OrdinalIgnoreCase);
}
}