我有一个从"标准"返回的数据列表。来自实现Breeze EFContextProvider的ApiController的HttpGet IQueryable方法。当其中一个对象引用已在有效负载中返回的另一个对象时,Breeze给我一个$ ref来引用已经返回的对象。
我希望带有所有相关对象的对象显式返回,而不是带有$ ref的引用。另外,我没有在客户端使用breeze.js库;只需使用网址直接调用Controller即可。
我发现了这个:
Breeze does not replace the Ref: node with its real data
这是我正在寻找的东西,但在服务器上使用Include仍然不会返回所有数据。
关于如何强迫"任何想法Breeze在服务器端包含所有相关数据,无论它是否在有效负载中返回和引用?
更新1
根据Steve的回答,我将以下内容添加到App_Start文件夹中的BreezeWebApiConfig.RegisterBreezePreStart方法中:
var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling = PreserveReferencesHandling.Object;
编译和运行仅使用$ ref组而不是完整数据生成相同的输出。我向服务器发送请求以扩展集合。我是否需要在每次向控制器发出请求时更改SerializerSettings,或者将其添加到BreezeWebApiConfig.RegisterBreezePreStart方法是否足够?
更新2
我已根据Steve在答案中添加的链接中的说明添加了CustomBreezeConfig类。然而,我正在使用Breeze.WebApi2,因此看起来BreezeConfig实际上是在Breeze.ContextProvider中。代码编译,但我仍然看到JSON中实际对象的相同$ ref。
我是否需要在项目的特定位置包含此CustomerBreezeConfig类,以便Breeze使用它的序列化设置?
答案 0 :(得分:0)
在WebAPI下,Breeze使用Json.NET序列化程序将结果转换为JSON。您可以更改序列化设置(特别是PreserveObjectReferences设置)以更改此行为。
Breeze配置它自己的JSON序列化程序,因此在Breeze应用程序中,您需要按照Breeze Web API Controller doc中的说明进行配置。
请注意,如果关闭PreserveObjectReferences,则可能还需要配置ReferenceLoopHandling设置,如果在对象图中有循环引用(就像我们大多数人一样)。