From 766ae0a8dffedcbc2f8e7a9df8140bc27d2326f0 Mon Sep 17 00:00:00 2001 From: cankoluman Date: Mon, 28 Apr 2014 14:32:34 +0100 Subject: [PATCH] Issue #AR-1_serialization: removed hardcoded fieldsets[0].properties restriction --- .../ArchetypeJsonConverterTest.cs | 1 - .../Serialization/ArchetypeJsonConverter.cs | 18 +++++++++--------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/app/Umbraco/Archetype.Tests/Serialization/ArchetypeJsonConverterTest.cs b/app/Umbraco/Archetype.Tests/Serialization/ArchetypeJsonConverterTest.cs index eff9a44..f5ad6bb 100644 --- a/app/Umbraco/Archetype.Tests/Serialization/ArchetypeJsonConverterTest.cs +++ b/app/Umbraco/Archetype.Tests/Serialization/ArchetypeJsonConverterTest.cs @@ -325,7 +325,6 @@ namespace Archetype.Tests.Serialization }; var json = JsonConvert.SerializeObject(model, Formatting.Indented); - var result = JsonConvert.DeserializeObject(json); Assert.NotNull(result); diff --git a/app/Umbraco/Umbraco.Archetype/Serialization/ArchetypeJsonConverter.cs b/app/Umbraco/Umbraco.Archetype/Serialization/ArchetypeJsonConverter.cs index b2f1694..564aa44 100644 --- a/app/Umbraco/Umbraco.Archetype/Serialization/ArchetypeJsonConverter.cs +++ b/app/Umbraco/Umbraco.Archetype/Serialization/ArchetypeJsonConverter.cs @@ -44,14 +44,13 @@ namespace Archetype.Umbraco.Serialization var obj = Activator.CreateInstance(objectType); - if (null != obj as IEnumerable + if (null != obj as IEnumerable && jToken["fieldsets"] != null && jToken["fieldsets"].Any()) { var model = obj as IEnumerable; - var fieldsets = jToken["fieldsets"]; var itemType = model.GetType().BaseType.GetGenericArguments().First(); - foreach (var fs in fieldsets.Where(fs => fs["alias"].ToString().Equals(GetFieldsetName(itemType)))) + foreach (var fs in jToken["fieldsets"].Where(fs => fs["alias"].ToString().Equals(GetFieldsetName(itemType)))) { var item = JsonConvert.DeserializeObject( fs["properties"].ToString(), itemType, GetArchetypeDatatypeConverter(itemType)); @@ -64,15 +63,16 @@ namespace Archetype.Umbraco.Serialization if (null == jToken as JArray) { - jToken = jToken.SelectToken("fieldsets[0].properties"); + var objAlias = GetFieldsetName(objectType); + jToken = jToken["fieldsets"].Single(p => p.SelectToken("alias").ToString().Equals(objAlias)).SelectToken("properties"); } - var properties = obj.GetType() - .GetProperties(BindingFlags.Instance | BindingFlags.Public); + var properties = GetSerialiazableProperties(obj); foreach (var propertyInfo in properties) { var propAlias = GetJsonPropertyName(propertyInfo); + var propJToken = jToken.SingleOrDefault(p => p.SelectToken("alias").ToString().Equals(propAlias)); if (propJToken == null) @@ -107,7 +107,7 @@ namespace Archetype.Umbraco.Serialization if (null != models) return models; - var properties = GetPropertiesToSerialize(value).ToList(); + var properties = GetSerialiazableProperties(value).ToList(); if (!PropertyLayoutHasFieldsets(properties)) return new List() { value }; @@ -208,7 +208,7 @@ namespace Archetype.Umbraco.Serialization } }; - var properties = GetPropertiesToSerialize(obj); + var properties = GetSerialiazableProperties(obj); var fsProperties = new List(); @@ -235,7 +235,7 @@ namespace Archetype.Umbraco.Serialization return jObj; } - private IEnumerable GetPropertiesToSerialize(object obj) + private IEnumerable GetSerialiazableProperties(object obj) { return obj.GetType() .GetProperties(BindingFlags.Instance | BindingFlags.Public)