0

使用下面的代码,我遇到了一个问题,即并非所有列都返回 data.results 数组中的数据。例如,如果数据库中第 1 行的 col4 为空,则 data.results[0] 不包含 col4 的元素,但第 2 行有一个值,则 data.results[1] 将包含 col4 的值。我希望数组中的每个返回项都包含具有数据库值或 null 的所有项。如果不能返回 null,则可以使用空字符串。

    var query = new breeze.EntityQuery()
             .from('mytable')
             .where('col1', 'substringof', '2')
             .select('col1,col2,col3,col4')
             .orderBy('col1')
             .take(200);


    return _manager
        .executeQuery(query)
        .then(function (data) {
            return data.results;
        })
        .fail(queryFailed);
}
4

1 回答 1

0

默认情况下,Breeze 不会在其 JSON 结果中序列化 null 值。这是一个经过深思熟虑的选择,以减少电线上的微风有效载荷。而且..这通常不是返回“实体”的查询的问题。即存在微风元数据的数据。因为已经在此类实体上定义了属性。

但是,如果您按原样返回匿名结果,那么这可能是个问题。您显然可以解决它,因为您知道您请求的属性,并且如果它们不在结果中,可以在查询后更新它们。

但是您也可以通过“BreezeConfig”类更改微风的默认配置以适应这种情况。

BreezeConfig 支持在 Web API 中自定义支持 Breeze 相关操作的组件。BreezeConfig 定义默认行为;您可以通过从它派生并覆盖其虚拟方法来替换您自己的行为。Breeze.NET 将在您的项目引用的程序集中发现您的子类,并使用它而不是 BreezeConfig。

使用 BreezeConfig 配置具有特定设置的 Json.Net 序列化程序。您可以通过编写覆盖“CreateJsonSerializerSettings”方法的 BreezeConfig 子类来替换这些设置,如下例所示:

public class CustomBreezeConfig : Breeze.WebApi.BreezeConfig {    
  protected override JsonSerializerSettings CreateJsonSerializerSettings() {   
    var baseSettings = base.CreateJsonSerializerSettings();      
    baseSettings.NullValueHandling = NullValueHandling.Include;
    return baseSettings;  
} 

希望这可以帮助。

于 2013-03-13T18:55:00.343 回答