You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 16:54:56