diff --git a/app/Umbraco/Archetype.Tests/Serialization/JsonTestModels.cs b/app/Umbraco/Archetype.Tests/Serialization/JsonTestModels.cs index e09c3a7..bb72c16 100644 --- a/app/Umbraco/Archetype.Tests/Serialization/JsonTestModels.cs +++ b/app/Umbraco/Archetype.Tests/Serialization/JsonTestModels.cs @@ -8,7 +8,7 @@ namespace Archetype.Tests.Serialization #region json test Models [AsArchetype("urlPicker")] - [JsonConverter(typeof(ArchetypeJsonConverter))] + [JsonConverter(typeof(ArchetypeJsonConverter))] public class UrlPicker { [JsonProperty("title")] @@ -24,7 +24,7 @@ namespace Archetype.Tests.Serialization } [AsArchetype("contactDetails")] - [JsonConverter(typeof(ArchetypeJsonConverter))] + [JsonConverter(typeof(ArchetypeJsonConverter))] public class ContactDetails { [JsonProperty("name")] @@ -44,7 +44,7 @@ namespace Archetype.Tests.Serialization } [AsArchetype("companyDetails")] - [JsonConverter(typeof(ArchetypeJsonConverter))] + [JsonConverter(typeof(ArchetypeJsonConverter))] public class CompanyDetails { [JsonProperty("region")] @@ -54,7 +54,7 @@ namespace Archetype.Tests.Serialization } [AsArchetype("allContactDetails")] - [JsonConverter(typeof(ArchetypeJsonConverter))] + [JsonConverter(typeof(ArchetypeJsonConverter))] public class AllContactDetails { public ContactDetails UserDetails { get; set; } @@ -63,13 +63,13 @@ namespace Archetype.Tests.Serialization } [AsArchetype("contactDetailsList")] - [JsonConverter(typeof(ArchetypeJsonConverter))] + [JsonConverter(typeof(ArchetypeJsonConverter))] public class ContactDetailsList : List { } [AsArchetype("annualStatement")] - [JsonConverter(typeof(ArchetypeJsonConverter))] + [JsonConverter(typeof(ArchetypeJsonConverter))] public class AnnualStatement { public DateTime FiscalYearStart { get; set; } @@ -81,7 +81,7 @@ namespace Archetype.Tests.Serialization } [AsArchetype("mergerDetails")] - [JsonConverter(typeof(ArchetypeJsonConverter))] + [JsonConverter(typeof(ArchetypeJsonConverter))] public class MergerDetails { public DateTime MergerDate { get; set; } @@ -94,7 +94,7 @@ namespace Archetype.Tests.Serialization #region complex nested model [AsArchetype("pages")] - [JsonConverter(typeof(ArchetypeJsonConverter))] + [JsonConverter(typeof(ArchetypeJsonConverter))] public class PageDetails { [JsonProperty("pages")] @@ -105,7 +105,7 @@ namespace Archetype.Tests.Serialization } [AsArchetype("captions")] - [JsonConverter(typeof(ArchetypeJsonConverter))] + [JsonConverter(typeof(ArchetypeJsonConverter))] public class Captions { [JsonProperty("captions")] @@ -113,13 +113,13 @@ namespace Archetype.Tests.Serialization } [AsArchetype("textstringArray")] - [JsonConverter(typeof(ArchetypeJsonConverter))] + [JsonConverter(typeof(ArchetypeJsonConverter))] public class TextList : List { } [AsArchetype("textstringArray")] - [JsonConverter(typeof(ArchetypeJsonConverter))] + [JsonConverter(typeof(ArchetypeJsonConverter))] public class TextItem { [JsonProperty("textstring")] @@ -137,14 +137,14 @@ namespace Archetype.Tests.Serialization } [AsArchetype("slideShow")] - [JsonConverter(typeof(ArchetypeJsonConverter))] + [JsonConverter(typeof(ArchetypeJsonConverter))] public class SlideShow { public string Slides { get; set; } } [AsArchetype("seo")] - [JsonConverter(typeof(ArchetypeJsonConverter))] + [JsonConverter(typeof(ArchetypeJsonConverter))] public class Seo { public string MetaTitle { get; set; } @@ -152,7 +152,7 @@ namespace Archetype.Tests.Serialization } [AsArchetype("TextPage")] - [JsonConverter(typeof(ArchetypeJsonConverter))] + [JsonConverter(typeof(ArchetypeJsonConverter))] public class TextPage : PageBase { [AsFieldset] @@ -163,16 +163,15 @@ namespace Archetype.Tests.Serialization } [AsArchetype("TextPageList")] - [JsonConverter(typeof(ArchetypeJsonConverter))] + [JsonConverter(typeof(ArchetypeJsonConverter))] public class TextPageList : List { } [AsArchetype("Pages")] - [JsonConverter(typeof(ArchetypeJsonConverter))] + [JsonConverter(typeof(ArchetypeJsonConverter))] public class PageList { - [AsArchetype("Pages")] public TextPageList Pages { get; set; } } diff --git a/app/Umbraco/Umbraco.Archetype/Serialization/ArchetypeJsonConverter.cs b/app/Umbraco/Umbraco.Archetype/Serialization/ArchetypeJsonConverter.cs index 4ae7d19..618b9aa 100644 --- a/app/Umbraco/Umbraco.Archetype/Serialization/ArchetypeJsonConverter.cs +++ b/app/Umbraco/Umbraco.Archetype/Serialization/ArchetypeJsonConverter.cs @@ -11,8 +11,7 @@ using Newtonsoft.Json.Linq; namespace Archetype.Umbraco.Serialization { - public class ArchetypeJsonConverter : JsonConverter - where T : class, new() + public class ArchetypeJsonConverter : JsonConverter { public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { @@ -107,7 +106,7 @@ namespace Archetype.Umbraco.Serialization foreach (var fs in jToken["fieldsets"].Where(fs => fs["alias"].ToString().Equals(GetFieldsetName(itemType)))) { var item = JsonConvert.DeserializeObject( - fs["properties"].ToString(), itemType, GetArchetypeDatatypeConverter(itemType)); + fs["properties"].ToString(), itemType, GetArchetypeDatatypeConverter()); obj.GetType().GetMethod("Add").Invoke(obj, new[] { item }); } @@ -132,7 +131,7 @@ namespace Archetype.Umbraco.Serialization var propValue = IsValueArchetypeDatatype(propInfo.PropertyType) ? JsonConvert.DeserializeObject(fsJToken.ToString(), propInfo.PropertyType, - GetArchetypeDatatypeConverter(propInfo.PropertyType)) + GetArchetypeDatatypeConverter()) : GetDeserializedPropertyValue(fsJToken, propInfo.PropertyType); ; propInfo.SetValue(obj, propValue); @@ -173,7 +172,7 @@ namespace Archetype.Umbraco.Serialization { return IsValueArchetypeDatatype(propertyInfo.PropertyType) ? JsonConvert.DeserializeObject(propJToken["value"].ToString(), propertyInfo.PropertyType, - GetArchetypeDatatypeConverter(propertyInfo.PropertyType)) + GetArchetypeDatatypeConverter()) : GetDeserializedPropertyValue(propJToken["value"], propertyInfo.PropertyType); } @@ -269,7 +268,7 @@ namespace Archetype.Umbraco.Serialization new JProperty("value", IsValueArchetypeDatatype(propValue) ? new JRaw(JsonConvert.SerializeObject(propValue, - GetArchetypeDatatypeConverter(propValue))) + GetArchetypeDatatypeConverter())) : new JValue(GetSerializedPropertyValue(propValue)))); fsProperties.Add(fsProperty); @@ -314,18 +313,9 @@ namespace Archetype.Umbraco.Serialization return type.GetCustomAttributes(typeof(AsArchetypeAttribute), true).Length > 0; } - private JsonConverter GetArchetypeDatatypeConverter(object value) + private JsonConverter GetArchetypeDatatypeConverter() { - return GetArchetypeDatatypeConverter(value.GetType()); - } - - private JsonConverter GetArchetypeDatatypeConverter(Type type) - { - var converterType = typeof(ArchetypeJsonConverter<>); - Type[] typeArgs = { type }; - var genericType = converterType.MakeGenericType(typeArgs); - - return (JsonConverter)Activator.CreateInstance(genericType); + return (JsonConverter)Activator.CreateInstance(GetType()); } private string GetSerializedPropertyValue(object propValue)