Merge branch 'v8/nucache-serializer' of https://github.com/nzdev/Umbraco-CMS into nzdev-v8/nucache-serializer

This commit is contained in:
Shannon
2020-07-03 00:52:40 +10:00
13 changed files with 88 additions and 28 deletions

View File

@@ -7,7 +7,7 @@ namespace Umbraco.Web.PublishedCache.NuCache.DataSource
/// <summary>
/// The content item 1:M data that is serialized to JSON
/// </summary>
internal class ContentNestedData
public class ContentNestedData
{
//dont serialize empty properties
[JsonProperty("pd")]

View File

@@ -6,7 +6,7 @@ namespace Umbraco.Web.PublishedCache.NuCache.DataSource
/// <summary>
/// Represents the culture variation information on a content item
/// </summary>
internal class CultureVariation
public class CultureVariation
{
[JsonProperty("nm")]
public string Name { get; set; }

View File

@@ -20,7 +20,15 @@ namespace Umbraco.Web.PublishedCache.NuCache.DataSource
// provides efficient database access for NuCache
internal class DatabaseDataSource : IDataSource
{
private const int PageSize = 500;
private readonly IContentNestedDataSerializer _contentNestedDataSerializer;
internal DatabaseDataSource(IContentNestedDataSerializer contentNestedDataSerializer)
{
_contentNestedDataSerializer = contentNestedDataSerializer;
}
// we want arrays, we want them all loaded, not an enumerable
@@ -198,7 +206,7 @@ namespace Umbraco.Web.PublishedCache.NuCache.DataSource
yield return CreateMediaNodeKit(row);
}
private static ContentNodeKit CreateContentNodeKit(ContentSourceDto dto)
private ContentNodeKit CreateContentNodeKit(ContentSourceDto dto)
{
ContentData d = null;
ContentData p = null;
@@ -213,7 +221,7 @@ namespace Umbraco.Web.PublishedCache.NuCache.DataSource
}
else
{
var nested = DeserializeNestedData(dto.EditData);
var nested = _contentNestedDataSerializer.Deserialize(dto.EditData);
d = new ContentData
{
@@ -240,7 +248,7 @@ namespace Umbraco.Web.PublishedCache.NuCache.DataSource
}
else
{
var nested = DeserializeNestedData(dto.PubData);
var nested = _contentNestedDataSerializer.Deserialize(dto.PubData);
p = new ContentData
{
@@ -271,12 +279,12 @@ namespace Umbraco.Web.PublishedCache.NuCache.DataSource
return s;
}
private static ContentNodeKit CreateMediaNodeKit(ContentSourceDto dto)
private ContentNodeKit CreateMediaNodeKit(ContentSourceDto dto)
{
if (dto.EditData == null)
throw new Exception("No data for media " + dto.Id);
var nested = DeserializeNestedData(dto.EditData);
var nested = _contentNestedDataSerializer.Deserialize(dto.EditData);
var p = new ContentData
{
@@ -303,17 +311,6 @@ namespace Umbraco.Web.PublishedCache.NuCache.DataSource
return s;
}
private static ContentNestedData DeserializeNestedData(string data)
{
// by default JsonConvert will deserialize our numeric values as Int64
// which is bad, because they were Int32 in the database - take care
var settings = new JsonSerializerSettings
{
Converters = new List<JsonConverter> { new ForceInt32Converter() }
};
return JsonConvert.DeserializeObject<ContentNestedData>(data, settings);
}
}
}

View File

@@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Umbraco.Web.PublishedCache.NuCache.DataSource
{
public interface IContentNestedDataSerializer
{
ContentNestedData Deserialize(string data);
string Serialize(ContentNestedData nestedData);
}
}

View File

@@ -0,0 +1,31 @@
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Umbraco.Core.Serialization;
namespace Umbraco.Web.PublishedCache.NuCache.DataSource
{
internal class JsonContentNestedDataSerializer : IContentNestedDataSerializer
{
public ContentNestedData Deserialize(string data)
{
// by default JsonConvert will deserialize our numeric values as Int64
// which is bad, because they were Int32 in the database - take care
var settings = new JsonSerializerSettings
{
Converters = new List<JsonConverter> { new ForceInt32Converter() }
};
return JsonConvert.DeserializeObject<ContentNestedData>(data, settings);
}
public string Serialize(ContentNestedData nestedData)
{
return JsonConvert.SerializeObject(nestedData);
}
}
}

View File

@@ -5,7 +5,7 @@ using Umbraco.Core.Serialization;
namespace Umbraco.Web.PublishedCache.NuCache.DataSource
{
internal class PropertyData
public class PropertyData
{
private string _culture;
private string _segment;