using System; 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) { // read variations count var pcount = PrimitiveSerializer.Int32.ReadFrom(stream); if (pcount == 0) return Empty; // read each variation var dict = new Dictionary(StringComparer.InvariantCultureIgnoreCase); for (var i = 0; i < pcount; i++) { var languageId = PrimitiveSerializer.String.ReadFrom(stream); var cultureVariation = new CultureVariation { Name = ReadStringObject(stream), UrlSegment = 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) { // TODO: 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) WriteObject(variation.UrlSegment, stream); // write an object in case it's null (though... should not happen) PrimitiveSerializer.DateTime.WriteTo(variation.Date, stream); } } } }