C# 为什么Razor页面无法访问子列表?

C# 为什么Razor页面无法访问子列表?,c#,asp.net,asp.net-mvc,razor,json.net,C#,Asp.net,Asp.net Mvc,Razor,Json.net,我正在编写一个ASP.NET Razor/Blazor应用程序,它正在从MSSQL服务器检索一组清单模板 该查询返回JSON格式的整个检查表模板数组结构,该结构与检查表的类布局相匹配 每个检查表面板都有一系列与之相关的阶段。检查表类别包括: 公共类ChecklistTemplate { 公共Guid Id{get;set;} 公共日期时间?LastModified{get;set;} 公共bool活动{get;set;} 公共字符串名称{get;set;} 公共字符串说明{get;set;} 公

我正在编写一个ASP.NET Razor/Blazor应用程序,它正在从MSSQL服务器检索一组清单模板

该查询返回JSON格式的整个检查表模板数组结构,该结构与检查表的类布局相匹配

每个检查表面板都有一系列与之相关的阶段。检查表类别包括:

公共类ChecklistTemplate
{
公共Guid Id{get;set;}
公共日期时间?LastModified{get;set;}
公共bool活动{get;set;}
公共字符串名称{get;set;}
公共字符串说明{get;set;}
公共列表阶段{get;set;}
}
公共类ChecklistTemplatePhase
{
公共Guid Id{get;set;}
公共日期时间?LastModified{get;set;}
公共Guid ChecklistTemplateId{get;set;}
公共整数排序{get;set;}
公共bool活动{get;set;}
公共字符串名称{get;set;}
}
我正在处理返回的结果

//以块的形式获取JSON结果
while(reader.Read())
{
json_result+=reader.GetString(0);
}
//所有可用检查表模板的列表
列出检查清单、模板和清单;
//用SQL server返回的JSON填充我们的列表
检查表\u模板\u列表=JsonConvert.DeserializeObject(json\u结果);
//测试访问阶段列表是有效的
foreach(检查表模板列表[0]中的检查表模板阶段p)。阶段)
{
Console.Write(“{0}”,p.Name);
}
//返回我们的填充列表
返回等待任务。FromResult(检查表模板列表);
这很好用。在调试模式下,清单模板列表与从MS SQL server返回的JSON结构完全匹配

我有一个Razor组件,它在
OnInitializedAsync()
上调用此方法。剃须刀组件是

@page”/checklist模板
@使用ChecklistApp.Data
@注入DataAccessService数据库服务
检查表模板
@如果(检查表模板列表==null)
{
没有检查表模板
}
其他的
{
foreach(检查表模板列表中的检查表模板c)
{
//这很有效
@c、 名字
//这并不重要
@c、 阶段[0]。名称
}
}
@代码{
私人清单清单(模板)(清单);;
受保护的重写异步任务OnInitializedAsync()
{
checklist_templates_list=wait DaService.GetChecklistTemplates();
}
}
我可以显示
检查列表模板
本身的属性,但是当我以任何方式访问
阶段
成员时,我会

System.NullReferenceException:“对象引用未设置为对象的实例。” ChecklistApp.Data.ChecklistTemplate.Phases.get返回空值

同样,在调试模式下,检查Razor组件中的
checklist\u templates\u list
的值将显示整个树,包括附加和填充的
阶段
,这将向我表明反序列化工作正常,并且类实例可用于Razor组件。但是当我尝试访问阶段列表时,我得到了上面的错误


为什么我可以用普通的C#方法打印
阶段
子列表的成员,但不能在Razor组件中打印?

您确定
检查表模板列表
中的每个项目都初始化了
阶段
属性吗?不,我不是。我删除了包含0个阶段的行,代码开始工作。我打消了这种可能性,因为我认为我正在访问第0个模板,它确实有阶段。也许反序列化正在改变顺序。@devNull实际上,我刚刚发现:页面正在处理第0个模板,然后移动到第1个具有空阶段的模板。这解释了我在执行代码时的行为。它在我认为是第0个模板的最后一个阶段抛出异常,但实际上是在处理第1个模板的空阶段期间。能否请您提供您的意见作为答案,以便我将其标记为已解决?