在NoDB example之后,我更改了现有的WebAPI控制器以使用Breeze.WebApi2.BreezeController
注释。这会将JSON结果从非常简单的事情中改变:
[{"Name":"Thing1","Description":"Description of Thing 1"},
{"Name":"Thing2","Description":"Another description"}]
对于更复杂和带宽消耗的事情:
[{"$id":"1","$type":"MyCompany.MyProduct.Models.ContentType, MyCompany.MyProduct","Name":"Thing1","Description":"Description of Thing 1"},
{"$id":"2","$type":"MyCompany.MyProduct.Models.ContentType, MyCompany.MyProduct","Name":"Thing2","Description":"Another description"}]
如this previous question中所述,额外信息实际上并不向客户端提供元数据。我仍然需要手动定义。
鉴于上述情况,有两个问题:
答案 0 :(得分:0)
在序列化期间,Json.NET在服务器上添加了$ id,$ type和$ ref属性。默认情况下,Breeze客户端使用$ type属性来确定要实现的'EntityType'。 $ id和$ ref属性用于处理对象图,以便引用实体的json永远不会表达多次。这可以通过EntityQuery'expand'方法调用或通过'select'方法在任意数量的复杂投影中发生。
Breeze不需要这些,但如果你压制它们(通过服务器上的Json.NET设置),那么你需要实现一个客户端'jsonResultsAdapter'来处理上面提到的所有内容。