如何通过路由从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
相关产品推荐
相关产品推荐

