Browse Source

Language serialization fixed

pull/169/head
Sebastian Stehle 8 years ago
parent
commit
7a68b05ac8
  1. 63
      src/Squidex.Domain.Apps.Core.Model/Apps/Json/JsonLanguagesConfig.cs
  2. 21
      src/Squidex.Domain.Apps.Core.Model/Apps/Json/LanguagesConfigConverter.cs
  3. 6
      tests/Squidex.Domain.Apps.Core.Tests/Model/Apps/LanguagesConfigJsonTests.cs

63
src/Squidex.Domain.Apps.Core.Model/Apps/Json/JsonLanguagesConfig.cs

@ -0,0 +1,63 @@
// ==========================================================================
// JsonLanguagesConfig.cs
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex Group
// All rights reserved.
// ==========================================================================
using System.Collections.Generic;
using Newtonsoft.Json;
using Squidex.Infrastructure;
namespace Squidex.Domain.Apps.Core.Apps.Json
{
public sealed class JsonLanguagesConfig
{
[JsonProperty]
public Dictionary<string, JsonLanguageConfig> Languages { get; set; }
[JsonProperty]
public Language Master { get; set; }
public JsonLanguagesConfig()
{
}
public JsonLanguagesConfig(LanguagesConfig value)
{
Languages = new Dictionary<string, JsonLanguageConfig>(value.Count);
foreach (LanguageConfig config in value)
{
Languages.Add(config.Language, new JsonLanguageConfig(config));
}
Master = value.Master?.Language;
}
public LanguagesConfig ToConfig()
{
var languagesConfig = new LanguageConfig[Languages?.Count ?? 0];
if (Languages != null)
{
var i = 0;
foreach (var config in Languages)
{
languagesConfig[i++] = config.Value.ToConfig(config.Key);
}
}
var result = LanguagesConfig.Build(languagesConfig);
if (Master != null)
{
result = result.MakeMaster(Master);
}
return result;
}
}
}

21
src/Squidex.Domain.Apps.Core.Model/Apps/Json/LanguagesConfigConverter.cs

@ -7,7 +7,6 @@
// ==========================================================================
using System;
using System.Collections.Generic;
using Newtonsoft.Json;
using Squidex.Infrastructure.Json;
@ -17,30 +16,16 @@ namespace Squidex.Domain.Apps.Core.Apps.Json
{
protected override void WriteValue(JsonWriter writer, LanguagesConfig value, JsonSerializer serializer)
{
var json = new Dictionary<string, JsonLanguageConfig>(value.Count);
foreach (LanguageConfig config in value)
{
json.Add(config.Language, new JsonLanguageConfig(config));
}
var json = new JsonLanguagesConfig(value);
serializer.Serialize(writer, json);
}
protected override LanguagesConfig ReadValue(JsonReader reader, Type objectType, JsonSerializer serializer)
{
var json = serializer.Deserialize<Dictionary<string, JsonLanguageConfig>>(reader);
var languagesConfig = new LanguageConfig[json.Count];
var i = 0;
foreach (var config in json)
{
languagesConfig[i++] = config.Value.ToConfig(config.Key);
}
var json = serializer.Deserialize<JsonLanguagesConfig>(reader);
return LanguagesConfig.Build(languagesConfig);
return json.ToConfig();
}
}
}

6
tests/Squidex.Domain.Apps.Core.Tests/Model/Apps/LanguagesConfigJsonTests.cs

@ -6,6 +6,7 @@
// All rights reserved.
// ==========================================================================
using System.Linq;
using FluentAssertions;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
@ -25,11 +26,14 @@ namespace Squidex.Domain.Apps.Core.Model.Apps
var sut = LanguagesConfig.Build(
new LanguageConfig(Language.EN),
new LanguageConfig(Language.DE, true, Language.EN),
new LanguageConfig(Language.IT, false, Language.DE));
new LanguageConfig(Language.IT, false, Language.DE))
.MakeMaster(Language.IT);
var serialized = JToken.FromObject(sut, serializer).ToObject<LanguagesConfig>(serializer);
serialized.ShouldBeEquivalentTo(sut);
Assert.Same(serialized.FirstOrDefault(x => x.Key == "it"), serialized.Master);
}
}
}

Loading…
Cancel
Save