在Breeze.js中投影时避免为每个结果重复类型定义

在Breeze.js中投影时避免为每个结果重复类型定义,breeze,Breeze,我目前正在使用投影查询实体,以避免返回整个对象。 但是,当查看来自服务器的实际响应时,我发现每个元素都重复了相同的类型定义 例如: ["$type":"_IB_4NdB_p8LiaC3WlWHHQ_pZzrAC_plF4[[System.Int32, mscorlib],[System.String, mscorlib],[System.String, mscorlib],[System.String, mscorlib],[System.Nullable`1[[S

我目前正在使用投影查询实体,以避免返回整个对象。 但是,当查看来自服务器的实际响应时,我发现每个元素都重复了相同的类型定义

例如:

["$type":"_IB_4NdB_p8LiaC3WlWHHQ_pZzrAC_plF4[[System.Int32, mscorlib],[System.String, mscorlib],[System.String, mscorlib],[System.String, mscorlib],[System.Nullable`1[[System.Int32, mscorlib]], mscorlib],[System.Int32, mscorlib],[System.Single, mscorlib]], _IB_4NdB_p8LiaC3WlWHHQ_pZzrAC_plF4_IdeaBlade"
现在,假设结果中的每个项都共享该查询的相同投影,有没有办法让Breeze只定义一次类型描述,而不是为每个元素定义一次

这看起来可能没什么大不了的,但随着结果大小的增加,这些字节确实开始累积起来。目前,由于这种开销,返回预测值和整个实体本身之间几乎没有差别

注意:事实证明,由于我们在实际环境中使用JSON的动态压缩,这实际上是一个小问题,因为经过gzip压缩后,200KB的响应实际上转化为不到20KB的流量。很可能会结束这个问题,除非有人要补充一些对其他人有用的东西

2014年9月18日更新 我决定“解决”序列化数据中长而难看的$type名称的问题,这些名称用于投影查询的动态类型和为端点(如“查找”)创建的匿名类型

有一个新的Breeze实验室nuget包,“Breeze.DynamicTypeRenaming”(搜索“Breeze动态类型重命名”)。这会将两个文件添加到Web API项目的“控制器”文件夹中。一个是
CustomBreezeConfig
,它替换Breeze的默认配置,并用新的
DynamicTypeRenamingSerializationBinder
重置Json.Net“Binder”设置;这个活页夹的类型名为magic

只需在WebAPI项目中安装nuget包,它就应该“正常工作”。在您的情况下,$type值将变成
“\u IB\u 4NdB\u p8LiaC3WlWHHQ\u pZzrAC\u plF4,Dynamic”

请参见“DocCode”示例中的示例


一如既往,这是一款Breeze实验室产品,而不是核心Breeze产品的一部分。它是“按原样”提供的,没有支持的承诺。我敢肯定它是好的,没有副作用。没有保证。我相信如果有问题,你会告诉我的。

使用JSON输出的动态压缩已经把这变成了一个问题,至少现在是这样,因为所有重复的内容都被服务器端严重压缩了。

这太可怕了,不是吗!这是C#生成的匿名类型。您可以通过强制转换为自定义DTO类型来摆脱它

我不知道它是否真的有害。无论如何,我讨厌看它

最近我一直在考虑添加一个可以检测这些丑东西并将它们变短的丑东西。这并不难。只是没有时间


为什么不自己写,为社区做贡献呢?我们会很感激的!:-)

我会让它开放一两天,看看是否有人能提供任何见解。是的,我曾想过使用dto,但由于压缩隐藏了问题,我现在不太担心。我很乐意贡献。我会尽量把我的日程安排放松一点,看看我能做些什么。谢谢:)刚刚添加了一个Json.Net配置,将丑陋的名称替换为正常的名称。见上面的更新。