我有一个轻量级的设置,我使用的是带有OData的Web API 2但不创建带有“/ odata / $ metadata”的“/ odata”端点,而只是使用带有属性路由的标准ApiController和标记的Get方法覆盖[可查询]:[InlineCountQueryable]详细信息Web API, OData, $inlinecount and testing。
除了我只能暴露没有任何集合或对象属性的专用模型类之外,它一切都很好,因为JSON序列化程序序列化了整个对象图。我理想的行为是完全忽略所有集合,并且仅在$ expand中包含对象属性。
我相信这可以起作用,因为OData Web Api 2脚手架VS 2013创建了一个实体框架上下文有类似的行为,但我想尽可能地保持这种倾向并避免走这条路线,因为我发现它有点脆弱,这个服务不需要公开$元数据描述。
更新
我在aspnet示例中进行了一些挖掘并发现了“CustomODataFormatter”示例,它似乎暴露了我需要修改的机制..但是那里概述的ODataSerializerProvider / ODataSerializer设置根本不适用于属性路由(任何用[Route(“Some / Url”)])定义的方法。
鉴于这似乎是我需要的,有没有人知道属性路由和odata序列化器提供程序机制是否应该一起工作?
答案 0 :(得分:0)
[JsonIgnore] or [DataMember]可用于忽略json.net序列化程序的属性。 webapi.odata 5.2支持ODataRouteAttribute,例如here。