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

如何通过路由从Umbraco获取数据并序列化为Company模型?

解决Umbraco节点转强类型Company列表的方法

嘿,我来帮你搞定这个问题!你已经拿到了company列表节点,接下来要把它的子节点转成all.generated.cs里的Company类列表,分这几步来:

1. 先获取列表下的所有Company子节点

你当前用GetByRoute拿到的l是列表节点本身,得先取出它下面的所有company类型子节点:

// 过滤出文档类型为company的子节点,注意别名要和你的文档类型一致
var companyNodes = l.Children.Where(x => x.DocumentTypeAlias.Equals("company", StringComparison.OrdinalIgnoreCase));

2. 映射为Company类列表

这里分三种常见情况,取决于你all.generated.cs里Company类的生成方式:

情况一:Company类继承自PublishedContentModel(最常见)

如果自动生成的Company类是继承自Umbraco的PublishedContentModel,那它通常会有一个接受IPublishedContent的构造函数,直接实例化就行:

var companyList = companyNodes.Select(node => new Company(node)).ToList();

这是最省事的方式,生成的模型已经帮你处理了属性映射逻辑。

情况二:手动映射(纯POCO模型场景)

如果生成的Company是普通POCO类,那你需要手动把IPublishedContent的属性对应赋值:

var companyList = companyNodes.Select(node => new Company
{
    Id = node.Id,
    CompanyName = node.GetPropertyValue<string>("companyName"), // 替换成你实际的属性别名
    Address = node.GetPropertyValue<string>("address"),
    // 其他属性依次对应节点的属性别名
}).ToList();

情况三:用AutoMapper批量映射(属性较多时推荐)

如果属性数量多,手动写映射太繁琐,可以用AutoMapper来配置批量映射规则:
首先初始化映射配置(可以放在项目启动类或全局配置中):

using AutoMapper;

Mapper.Initialize(cfg =>
{
    cfg.CreateMap<IPublishedContent, Company>()
        .ForMember(dest => dest.CompanyName, opt => opt.MapFrom(src => src.GetPropertyValue<string>("companyName")))
        .ForMember(dest => dest.Address, opt => opt.MapFrom(src => src.GetPropertyValue<string>("address")));
    // 继续添加其他属性的映射规则
});

然后执行映射:

var companyList = Mapper.Map<List<Company>>(companyNodes);

内容的提问来源于stack exchange,提问作者david

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:59:15