Breeze data.results不加载嵌套的JSON

时间:2013-04-17 17:26:32

标签: breeze

我有下一个等级类:

public class HClass
{
    public HClass()
    {
        Children = new List<HClass>();
    }

    [Key]
    public int Id { get; set; }
    public Nullable<int> ParentId { get; set; }        
    public string Name { get; set; }

    public virtual ICollection<HClass> Children { get; set; }
}

我在Controller中有一个返回父母和孩子的方法:

[HttpGet]
public IQueryable<HClass> Items()

我的viewmodel中有一个函数:

function getItems() {
        return entityQuery.from('Items')
            .using(manager).execute()
            .then(success)
            .fail(queryFailed);

        function success(data) {
            vm.items = data.results; //Problem here.
        }
    }

在调试模式下,我会检查“data.XHR.responseText”是否有嵌套的JSON,所有项目都包含各自的子项,但“data.results”只有没有子项的父项。

请帮助我。

1 个答案:

答案 0 :(得分:1)

这是设计的,data.results具有您查询的“立​​即”结果,即顶级“项目”。但是,如果您深入查看任何结果项的“Children”属性,则应该看到这些子项。

如果不是这种情况,请检查您是否在ApiController类上使用[BreezeController]属性。此属性配置JSON.NET序列化程序以向每个json“实体”添加“$ type”属性。如果您没有看到此属性,那么您可能会错过该属性。没有$ type信息breeze将不会将子项识别为实体并将忽略它们。

(旁注,你也可以使用JsonResultsAdapter或[JsonFormatter]属性做类似的事情,但[BreezeController]方法更简单)