Umbraco 7中从CurrentPage取数据并转为指定类型的问题
在Umbraco 7控制器中转换轮播图数据类型的解决方案
一、优先使用Umbraco内置的强类型获取方法
Umbraco的DynamicPublishedContent(即CurrentPage的类型)提供了GetPropertyValue<T>方法,可直接指定目标类型,省去手动处理object转换的麻烦:
// 直接获取为List<LearningPageCarousel>类型 var carousels = CurrentPage.GetPropertyValue<List<LearningPageCarousel>>("carousels");
该方法会自动处理Umbraco属性值到强类型的转换,是最简便的解决方案。
二、修正自定义类的定义
你的LearningPageCarousel类中InfoCards是字段而非属性,而Umbraco内部类型转换依赖的Json序列化默认不会处理字段,会导致转换失败。需将其改为自动属性:
public class LearningPageCarousel { public string Title { get; set; } // 改为带get/set的属性,初始化逻辑保留 public List<LearningLandingInfoCard> InfoCards { get; set; } = new List<LearningLandingInfoCard>(); }
如果必须保留字段,需给字段添加[JsonProperty]特性以启用序列化:
using Newtonsoft.Json; public class LearningPageCarousel { public string Title { get; set; } [JsonProperty] public List<LearningLandingInfoCard> InfoCards = new List<LearningLandingInfoCard>(); }
三、检查属性别名匹配
确保Umbraco后台配置的轮播图属性("carousels")的子项别名,与LearningPageCarousel类的属性名对应:
- 轮播图项的标题字段别名需和
Title属性匹配(Umbraco后台一般用小写别名如title,Newtonsoft.Json默认会自动映射驼峰命名到PascalCase属性) InfoCards对应的集合字段别名要和属性名匹配,且该字段的类型需能转换为List<LearningLandingInfoCard>
四、备选方案:Json序列化强制转换
如果内置方法无法完成转换,可通过Json序列化/反序列化强制转换,适用于Umbraco返回值为JArray或其他非直接可转换类型的场景:
using Newtonsoft.Json; // 获取原始属性值 var rawCarouselValue = CurrentPage.GetProperty("carousels").Value; // 序列化为Json字符串后反序列化为目标类型 var carousels = JsonConvert.DeserializeObject<List<LearningPageCarousel>>(rawCarouselValue.ToString());
内容的提问来源于stack exchange,提问作者DarkW1nter
相关产品推荐
相关产品推荐

