gpt4 book ai didi

c# - 如何从 glassmapper 映射的对象属性中获取 sitecore 字段?

转载 作者:行者123 更新时间:2023-11-30 15:28:33 25 4
gpt4 key购买 nike

我们将 Glass Mapper 与 Sitecore 结合使用,通过我们的模型,我们可以获得 sitecore 字段的值。但是我想通过使用模型轻松获取 sitecore 字段(sitecore 字段类型),而无需将任何字符串硬编码(使用 GetProperty() 时,您需要属性名称 string )到方法中。

所以我写了这个东西来实现这个,但是我不满意在使用它时需要传入 2 种类型,因为当你有一个长模型标识符时它看起来很糟糕。

   public static string SitecoreFieldName<T, TU>(Expression<Func<TU>> expr)
{
var body = ((MemberExpression)expr.Body);
var attribute = (typeof(T).GetProperty(body.Member.Name).GetCustomAttributes(typeof(SitecoreFieldAttribute), false)[0]) as SitecoreFieldAttribute;
return attribute.FieldName;
}

最理想的方式是能够像这样获取Model.SomeProperty.SitecoreField()。但是我无法弄清楚如何从那里进行反射。因为那可以是任何类型的扩展。

谢谢!

最佳答案

public static string SitecoreFieldName<TModel>(Expression<Func<TModel, object>> field)
{
var body = field.Body as MemberExpression;

if (body == null)
{
return null;
}

var attribute = typeof(TModel).GetProperty(body.Member.Name)
.GetCustomAttributes(typeof(SitecoreFieldAttribute), true)
.FirstOrDefault() as SitecoreFieldAttribute;

return attribute != null
? attribute.FieldName
: null;
}

请注意,我在 GetCustomAttributes 方法调用上设置了 inherit=true
否则继承的属性将被忽略。

关于c# - 如何从 glassmapper 映射的对象属性中获取 sitecore 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25626090/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com