using System.Collections.Generic; using System.IO; using CSharpTest.Net.Serialization; using Umbraco.Core; namespace Umbraco.Web.PublishedCache.NuCache.DataSource { internal class DictionaryOfCultureVariationSerializer : SerializerBase, ISerializer> { public IReadOnlyDictionary ReadFrom(Stream stream) { var dict = new Dictionary(); // read variations count var pcount = PrimitiveSerializer.Int32.ReadFrom(stream); // read each variation for (var i = 0; i < pcount; i++) { var languageId = PrimitiveSerializer.String.ReadFrom(stream); var cultureVariation = new CultureVariation { Name = ReadStringObject(stream), Date = ReadDateTime(stream) }; dict[languageId] = cultureVariation; } return dict; } private static readonly IReadOnlyDictionary Empty = new Dictionary(); public void WriteTo(IReadOnlyDictionary value, Stream stream) { var variations = value ?? Empty; // write variations count PrimitiveSerializer.Int32.WriteTo(variations.Count, stream); // write each variation foreach (var (culture, variation) in variations) { // fixme - it's weird we're dealing with cultures here, and languageId in properties PrimitiveSerializer.String.WriteTo(culture, stream); // should never be null WriteObject(variation.Name, stream); // write an object in case it's null (though... should not happen) PrimitiveSerializer.DateTime.WriteTo(variation.Date, stream); } } } }