Sitecore 玻璃映射器(4.1.2.67)未能映射富文本字段

Sitecore 玻璃映射器(4.1.2.67)未能映射富文本字段,sitecore,asp.net-web-api2,sitecore7,glass-mapper,Sitecore,Asp.net Web Api2,Sitecore7,Glass Mapper,我定义了几个类来映射模板项,如下所示: public class ContentBase { public virtual Guid Id { get; set; } public virtual string Name { get; set; } [SitecoreParent] public virtual ContentBase Parent { get; set; } [SitecoreItem] public virtual Item S

我定义了几个类来映射模板项,如下所示:

public class ContentBase
{
    public virtual Guid Id { get; set; }
    public virtual string Name { get; set; }
    [SitecoreParent]
    public virtual ContentBase Parent { get; set; }
    [SitecoreItem]
    public virtual Item Self { get; set; }
}
[SitecoreType(TemplateId = "{7979766D-DB9C-4E75-9BE3-5B481C6AB6FF}", AutoMap = true)]
public class EventsListing : ContentBase
{
    [SitecoreField(FieldName = "EventsLocation")]
    public virtual SitecoreFolder<Event> Events { get; set; }
}
[SitecoreType(TemplateId = "{CED01C9B-6284-461A-848F-2CDD00CC6DEB}", AutoMap = true)]
public class Event : ContentBase
{
    public virtual string Title { get; set; }
    public virtual string Details { get; set; }
    public virtual string iCalSummary { get; set; }
    public virtual Image ImageLandscape { get; set; }
    public virtual Image ImagePortrait { get; set; }
    public virtual Image ImageSquare { get; set; }
    public virtual string Date { get; set; }
    public virtual DateTime DateStart { get; set; }
    public virtual DateTime DateEnd { get; set; }
    public virtual string Location { get; set; }
    public virtual string GoogleMapsAddress { get; set; }
    public virtual string MemberDiscount { get; set; }
    public virtual Link EventLinkUrl { get; set; }
    public virtual string EventLinkText { get; set; }
}
[SitecoreField(Setting = SitecoreFieldSettings.RichTextRaw)]
public virtual string Details { get; set; }
公共类ContentBase
{
公共虚拟Guid Id{get;set;}
公共虚拟字符串名称{get;set;}
[SitecoreParent]
公共虚拟ContentBase父级{get;set;}
[SitecoreItem]
公共虚拟项Self{get;set;}
}
[SitecoreType(TemplateId=“{7979766D-DB9C-4E75-9BE3-5B481C6AB6FF}”,AutoMap=true]
公共类事件列表:ContentBase
{
[SitecoreField(FieldName=“EventsLocation”)]
公共虚拟站点CoreFolder事件{get;set;}
}
[SitecoreType(TemplateId=“{CED01C9B-6284-461A-848F-2CDD00CC6DEB}”,AutoMap=true]
公共类事件:ContentBase
{
公共虚拟字符串标题{get;set;}
公共虚拟字符串详细信息{get;set;}
公共虚拟字符串iCalSummary{get;set;}
公共虚拟映像{get;set;}
公共虚拟映像ImagePortrait{get;set;}
公共虚拟映像ImageSquare{get;set;}
公共虚拟字符串日期{get;set;}
公共虚拟日期时间日期开始{get;set;}
公共虚拟日期时间日期结束{get;set;}
公共虚拟字符串位置{get;set;}
公共虚拟字符串GoogleMapsAddress{get;set;}
公共虚拟字符串MemberDiscount{get;set;}
公共虚拟链接EventLinkUrl{get;set;}
公共虚拟字符串EventLinkText{get;set;}
}
事件的模板

我有一个基于GlassUserControl的EventsListing子布局,它成功地获取EventsListing的所有字段和子事件。然后,我在Date上有一个链接,通过web.api控制器为事件生成一个iCal

    [RoutePrefix("hbf/api/ical")]
public class EventICalController : ApiController
{
    [Route("{id:guid}")]
    [HttpGet]
    public HttpResponseMessage Get(Guid id)
    {
        var scc = new SitecoreContext(); 
        var item = scc.GetItem<Item>(id);
        var myEvent = scc.GetItem<Models.Event>(id);
[RoutePrefix(“hbf/api/ical”)]
公共类事件控制器:ApiController
{
[路由(“{id:guid}”)]
[HttpGet]
公共HttpResponseMessage获取(Guid id)
{
var scc=new SitecoreContext();
var item=scc.GetItem(id);
var myEvent=scc.GetItem(id);
该项看起来很好,我可以访问这些字段;但是调用scc.GetItem(id)会在“Details”字段上引发异常

异常嵌套是(下面是完整堆栈跟踪): Glass.Mapper.MapperException“未能创建类型模型。事件” Glass.Mapper.MapperException“未能映射/sitecore/content/…上的属性” Glass.Mapper.MapperException“未能映射Models.Event上的属性详细信息” System.NullReferenceException

如果我注释掉“Details”属性,它就会工作

我尝试了各种方法来获取SitecoreContext,甚至指定了语言也没有用。我还尝试了使用名称和/或ID以及字段类型设置SitecoreField属性

我可以从配置(或其他方面)来解决这个问题吗


{
“消息”:“发生错误。”,
“ExceptionMessage”:“未能创建类型xxx.Web.Models.Event”,
“例外类型”:“Glass.Mapper.MapperException”,
“StackTrace”:“在c:\\TeamCity\\buildAgent\\work\\8567e2ba106d3992\\Source\\Glass.Mapper\\Pipelines\\ObjectConstruction\\Tasks\\CreateContract\\CreateContractionArgs中的Glass.Mapper.Pipelines.CreateContraction.CreateContract.CreateObject(ObjectConstructionArgs):第115行
在c:\\TeamCity\\buildAgent\\work\\8567e2ba106d3992\\Source\\Glass.Mapper\\Pipelines\\ObjectConstruction.Tasks.CreateConcreateTask.Execute(ObjectConstructionArgs)中的Glass.Mapper.Pipelines.ObjectConstruction.Tasks.CreateConcreateConcreateTask.Execute(ObjectConstructionArgs):第68行
在c:\\TeamCity\\buildAgent\\work\\8567e2ba106d3992\\Source\\Glass.Mapper\\pipelinerunner`2.c_uu中显示Class3.b_uu2(T参数):第77行
在c:\\TeamCity\\buildAgent\\work\\8567e2ba106d3992\\Source\\Glass.Mapper\\pipeline\\pipelinerunner`2.c_uu显示Class3.b_uu2(T参数):第82行
在c:\\TeamCity\\buildAgent\\work\\8567e2ba106d3992\\Source\\Glass.Mapper\\pipeline\\pipelinerunner`2.c_uu显示Class3.b_uu2(T参数):第82行
在c:\\TeamCity\\buildAgent\\work\\8567e2ba106d3992\\Source\\Glass.Mapper\\pipeline\\pipelinerunner`2.c_uu显示Class3.b_uu2(T参数):第82行
在c:\\TeamCity\\buildAgent\\work\\8567e2ba106d3992\\Source\\Glass.Mapper\\pipeline\\pipelinerunner`2.c_uu显示Class3.b_uu2(T参数):第82行
在c:\\TeamCity\\buildAgent\\work\\8567e2ba106d3992\\Source\\Glass.Mapper\\pipeline\\pipelinerunner`2.c_uu显示Class3.b_uu2(T参数):第82行
在c:\\TeamCity\\buildAgent\\work\\8567e2ba106d3992\\Source\\Glass.Mapper\\AbstractService.cs中的Glass.Mapper.AbstractService.InstanceObject(AbstractTypeCreationContext AbstractTypeCreationContext)中
在c:\\TeamCity\\buildAgent\\work\\8567e2ba106d3992\\Source\\Glass.Mapper.Sc.SitecoreService.CreateType(类型、项、布尔isLazy、布尔推断类型、字典'2参数、对象[]构造函数参数)中
在c:\\TeamCity\\buildAgent\\work\\8567e2ba106d3992\\Source\\Glass.Mapper.Sc.SitecoreService.GetItem[T](Guid id,布尔值isLazy,布尔值推断类型)中
位于xxx.Web.Services.xxx.EventICalController.Get(Guid id)中的d:\\Dev\\LW\\xxx.Web\\Services\\xxx\\EventICalController.cs:第57行
在lambda_方法(闭包、对象、对象[])
在System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.c\u DisplayClass10.b\u 9(对象实例,对象[]方法参数)
在System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext,IDic
[SitecoreField(Setting = SitecoreFieldSettings.RichTextRaw)]
public virtual string Details { get; set; }
var sites = Sitecore.Configuration.Factory.GetSiteInfoList();
string currentHost = HttpContext.Current.Request.Url.Host;
var currentSite = sites.FirstOrDefault(obj => obj.HostName.Equals(currentHost, StringComparison.InvariantCultureIgnoreCase));
if (currentSite != null)
   {
       var newSite = new Sitecore.Sites.SiteContext(currentSite);
       if (newSite != null)
       {                 
           using (new SiteContextSwitcher(newSite))
           {

                ///Code here
           }
       {
    {