Javascript Breeze.js:如何在有效负载中包含所有相关数据,即使它已发送

Javascript Breeze.js:如何在有效负载中包含所有相关数据,即使它已发送,javascript,model-view-controller,odata,breeze,Javascript,Model View Controller,Odata,Breeze,我有一个从实现Breeze EFContextProvider的ApicController的标准HttpGet IQueryable方法返回的数据列表。当其中一个对象引用负载中已返回的另一个对象时,Breeze会给我一个$ref来引用已返回的对象 我希望包含所有相关对象的对象显式返回,而不是带有$ref的引用。此外,我没有在客户端使用breeze.js库;只需使用网址直接调用控制器即可 我发现: 这是我正在寻找的东西,但是在服务器上使用Include仍然不会返回所有数据 关于如何强制服务器端的

我有一个从实现Breeze EFContextProvider的ApicController的标准HttpGet IQueryable方法返回的数据列表。当其中一个对象引用负载中已返回的另一个对象时,Breeze会给我一个$ref来引用已返回的对象

我希望包含所有相关对象的对象显式返回,而不是带有$ref的引用。此外,我没有在客户端使用breeze.js库;只需使用网址直接调用控制器即可

我发现:

这是我正在寻找的东西,但是在服务器上使用Include仍然不会返回所有数据

关于如何强制服务器端的Breeze包含所有相关数据,而不管这些数据是否在有效负载中被返回和引用,有什么想法吗

更新1

根据下面Steve的回答,我在App_Start文件夹中的BreezeWebApiConfig.RegisterBreezePreStart方法中添加了以下内容:

var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling = PreserveReferencesHandling.Object;
编译和运行只使用$ref组而不是完整数据生成相同的输出。我正在向服务器发送一个请求以扩展集合。我是否需要在每次请求控制器时更改SerializeSettings,或者将其添加到BreezeWebApiConfig.RegisterBreezePreStart方法中就足够了

更新2

我根据Steve在回答中添加的链接上的说明添加了CustomBreezeConfig类。但是,我使用的是Breeze.WebApi2,因此BreezeConfig实际上位于Breeze.ContextProvider中。代码已编译,但我仍然看到JSON中实际对象的$ref相同


我是否需要将这个CustomerBreezeConfig类包含在项目中的特定位置,以便Breeze使用其序列化程序设置?

在WebAPI下,Breeze使用序列化程序将结果转换为JSON。您可以更改序列化程序设置,特别是更改此行为的设置

Breeze配置自己的JSON序列化程序,因此在Breeze应用程序中,您需要按照中所述进行配置


请注意,如果您关闭PreserveObjectReferences,您可能还需要配置设置,如果您像我们大多数人一样在对象图中有循环引用。

对不起,我遗漏了Breeze特定的配置信息,如果您使用[BreezeController]属性,这一点很重要。我相应地更新了我的答案。