从Tridion(DD4T-MVC)中的XML检索类别时出错

从Tridion(DD4T-MVC)中的XML检索类别时出错,tridion,dd4t,Tridion,Dd4t,在DD4T视图中,我试图选择类别中关键字的Path值 foreach(var类别在@Model.Categories中) { if(category.Title.Contains(“分类”)) { str=类别。关键字[0]。路径; 打破 } } 但是在@Model.Categories中得到null 错误:对象引用未设置为对象的实例 尽管数据以XML形式存在 请建议 您是否已向目标发布了类别?是,首先验证是否已将类别发布到代理数据库。页面或组件XML反序列化为IPage或IComponent

在DD4T视图中,我试图选择类别中关键字的Path值

foreach(var类别在@Model.Categories中)
{
if(category.Title.Contains(“分类”))
{
str=类别。关键字[0]。路径;
打破
}
}
但是在@Model.Categories中得到null

错误:对象引用未设置为对象的实例

尽管数据以XML形式存在


请建议

您是否已向目标发布了类别?

是,首先验证是否已将类别发布到代理数据库。页面或组件XML反序列化为IPage或IComponent对象的方式非常简单


同时指出您使用的是哪个版本的DD4T。我记得早期版本中存在反序列化问题。

我发现这是DD4T中的一个问题。解决方法非常简单:如果您使用组件(或页面)的实现作为模型,而不是接口,它就可以工作

因此,从以下内容开始您的观点:

@model DD4T.ContentModel.Component
而不是

@model DD4T.ContentModel.IComponent

然后再试一次。

它在执行Quirijn建议后工作,如 组件c=(组件)模型; c、 类别[0]

谢谢,
维卡斯·库马尔(Vikas Kumar)

我已将此作为一个问题记录在DD4T谷歌代码网站上

这似乎是由于List和IList不支持逆变,这意味着如下行:

IList<ICategory> IComponent.Categories
{
    get { return Categories as IList<ICategory>; }
}
IList IComponent.Categories
{
获取{返回类别为IList;}
}

在ContentModel类中,它永远不会工作。来自的建议是将其更改为IEnumerable,它支持逆变。

您可以指定在哪个XML中查看数据吗?您是否考虑过在DD4T google代码存储库中询问:?感谢大家的快速响应。Quirijn的建议正在发挥作用。嗨,Quirijn,如果你给我们提供更多信息,我们可以查看代码来解决这个问题。@Vikas:我在DD4T谷歌代码网站上创建了一个问题:。如果你能找到解决问题的方法,那就太棒了。谢谢尼尔,听起来很有可能。很棒的词,相反,我将在随意的对话中使用它:)