V14: Migrate nucache to use System.Text.Json (#15685)

* Create system text serializer

* Assign property names with system text

* Use the new serializer

* Impement AutoInterningStringConverter with System.Text.Json

* Implement TextAutoInterningStringKeyCaseInsensitiveDictionaryConverter

* Make CaseInsensitiveDictionaryConverter

* Force datetimes to be read as UTC

* Remove usages of Newtonsoft.Json

* Remove text prefixes

* Remove unused Newtonsoft converter

* Remove more newtonsoft

* Remove duplicate implementation

* Rmove usage of missing class in tests

* Ignore null values

* Fix tests

* Remove Newtonstoft reference from NuCache

---------

Co-authored-by: Elitsa <elm@umbraco.dk>
This commit is contained in:
Mole
2024-02-14 12:10:45 +01:00
committed by GitHub
parent 4f04669dce
commit 2dcdff5392
13 changed files with 167 additions and 248 deletions

View File

@@ -1,5 +1,6 @@
using System.Runtime.Serialization;
using Newtonsoft.Json;
using System.Text.Json.Serialization;
using Umbraco.Cms.Infrastructure.Serialization;
namespace Umbraco.Cms.Infrastructure.PublishedCache.DataSource;
@@ -10,35 +11,37 @@ namespace Umbraco.Cms.Infrastructure.PublishedCache.DataSource;
public class CultureVariation
{
[DataMember(Order = 0)]
[JsonProperty("nm")]
[JsonPropertyName("nm")]
public string? Name { get; set; }
[DataMember(Order = 1)]
[JsonProperty("us")]
[JsonPropertyName("us")]
public string? UrlSegment { get; set; }
[DataMember(Order = 2)]
[JsonProperty("dt")]
[JsonPropertyName("dt")]
[JsonConverter(typeof(ForceUtcDateTimeConverter))]
public DateTime Date { get; set; }
[DataMember(Order = 3)]
[JsonProperty("isd")]
[JsonPropertyName("isd")]
public bool IsDraft { get; set; }
// Legacy properties used to deserialize existing nucache db entries
[IgnoreDataMember]
[JsonProperty("name")]
[JsonPropertyName("nam")]
private string LegacyName { set => Name = value; }
[IgnoreDataMember]
[JsonProperty("urlSegment")]
[JsonPropertyName("urlSegment")]
private string LegacyUrlSegment { set => UrlSegment = value; }
[IgnoreDataMember]
[JsonProperty("date")]
[JsonPropertyName("date")]
[JsonConverter(typeof(ForceUtcDateTimeConverter))]
private DateTime LegacyDate { set => Date = value; }
[IgnoreDataMember]
[JsonProperty("isDraft")]
[JsonPropertyName("isDraft")]
private bool LegacyIsDraft { set => IsDraft = value; }
}