diff --git a/src/Umbraco.Core/Dynamics/DynamicXml.cs b/src/Umbraco.Core/Dynamics/DynamicXml.cs index ef3114f111..a6a7441580 100644 --- a/src/Umbraco.Core/Dynamics/DynamicXml.cs +++ b/src/Umbraco.Core/Dynamics/DynamicXml.cs @@ -75,6 +75,7 @@ namespace Umbraco.Core.Dynamics //ok, now lets try to match by member, property, extensino method var attempt = DynamicInstanceHelper.TryInvokeMember(this, binder, args, new[] { + typeof (IEnumerable), typeof (IEnumerable), typeof (DynamicXml) }); @@ -86,17 +87,18 @@ namespace Umbraco.Core.Dynamics //need to check the return type and possibly cast if result is from an extension method found if (attempt.Result.Reason == DynamicInstanceHelper.TryInvokeMemberSuccessReason.FoundExtensionMethod) { - if (attempt.Result.ObjectResult != null) + //if the result is already a DynamicXml instance, then we do not need to cast + if (attempt.Result.ObjectResult != null && !(attempt.Result.ObjectResult is DynamicXml)) { if (attempt.Result.ObjectResult is XElement) { - result = new DynamicXml((XElement) attempt.Result.ObjectResult); + result = new DynamicXml((XElement)attempt.Result.ObjectResult); } - if (attempt.Result.ObjectResult is IEnumerable) + else if (attempt.Result.ObjectResult is IEnumerable) { - result = ((IEnumerable) attempt.Result.ObjectResult).Select(x => new DynamicXml(x)); + result = ((IEnumerable)attempt.Result.ObjectResult).Select(x => new DynamicXml(x)); } - if (attempt.Result.ObjectResult is IEnumerable) + else if (attempt.Result.ObjectResult is IEnumerable) { result = ((IEnumerable)attempt.Result.ObjectResult).Select(x => new DynamicXml(x.BaseElement)); } diff --git a/src/Umbraco.Web/Models/DynamicPublishedContent.cs b/src/Umbraco.Web/Models/DynamicPublishedContent.cs index c41fd4b540..1eb3c1b9ba 100644 --- a/src/Umbraco.Web/Models/DynamicPublishedContent.cs +++ b/src/Umbraco.Web/Models/DynamicPublishedContent.cs @@ -66,20 +66,21 @@ namespace Umbraco.Web.Models //need to check the return type and possibly cast if result is from an extension method found if (attempt.Result.Reason == DynamicInstanceHelper.TryInvokeMemberSuccessReason.FoundExtensionMethod) { - if (attempt.Result.ObjectResult != null) + //we don't need to cast if it is already DynamicPublishedContent + if (attempt.Result.ObjectResult != null && (!(attempt.Result.ObjectResult is DynamicPublishedContent))) { if (attempt.Result.ObjectResult is IPublishedContent) { result = new DynamicPublishedContent((IPublishedContent)attempt.Result.ObjectResult); } - if (attempt.Result.ObjectResult is IEnumerable) + else if (attempt.Result.ObjectResult is IEnumerable) + { + result = new DynamicPublishedContentList((IEnumerable)attempt.Result.ObjectResult); + } + else if (attempt.Result.ObjectResult is IEnumerable) { result = new DynamicPublishedContentList((IEnumerable)attempt.Result.ObjectResult); } - if (attempt.Result.ObjectResult is IEnumerable) - { - result = new DynamicPublishedContentList((IEnumerable)attempt.Result.ObjectResult); - } } } return true; diff --git a/src/Umbraco.Web/Models/DynamicPublishedContentList.cs b/src/Umbraco.Web/Models/DynamicPublishedContentList.cs index 94d32dade3..bc24b99aca 100644 --- a/src/Umbraco.Web/Models/DynamicPublishedContentList.cs +++ b/src/Umbraco.Web/Models/DynamicPublishedContentList.cs @@ -228,20 +228,21 @@ namespace Umbraco.Web.Models //need to check the return type and possibly cast if result is from an extension method found if (attempt.Result.Reason == DynamicInstanceHelper.TryInvokeMemberSuccessReason.FoundExtensionMethod) { - if (attempt.Result.ObjectResult != null) + //we don't need to cast if the result is already DynamicPublishedContentList + if (attempt.Result.ObjectResult != null && (!(attempt.Result.ObjectResult is DynamicPublishedContentList))) { if (attempt.Result.ObjectResult is IPublishedContent) { result = new DynamicPublishedContent((IPublishedContent)attempt.Result.ObjectResult); } - if (attempt.Result.ObjectResult is IEnumerable) - { - result = new DynamicPublishedContentList((IEnumerable)attempt.Result.ObjectResult); - } - if (attempt.Result.ObjectResult is IEnumerable) + else if (attempt.Result.ObjectResult is IEnumerable) { result = new DynamicPublishedContentList((IEnumerable)attempt.Result.ObjectResult); } + else if (attempt.Result.ObjectResult is IEnumerable) + { + result = new DynamicPublishedContentList((IEnumerable)attempt.Result.ObjectResult); + } } } return true;