【问题标题】:Queryable Web API 2 OData serialization可查询的 Web API 2 OData 序列化
【发布时间】:2014-02-15 23:34:08
【问题描述】:

我有一个轻量级设置,我在其中使用带有 OData 的 Web API 2,但不创建带有随附“/odata/$metadata”的“/odata”端点,而是只使用带有属性路由和 Get 方法标记的标准 ApiController覆盖 [Queryable]:[InlineCountQueryable] 在此处详述 Web API, OData, $inlinecount and testing

这一切都很好,除了我只能公开没有任何集合或对象属性的专用模型类,因为 JSON 序列化程序会序列化整个对象图。我的理想行为是完全忽略所有集合,对象属性只包含在 $expand 中。

我相信这可以工作,因为 OData Web Api 2 脚手架 VS 2013 在实体框架上下文上创建具有相似的行为,但我希望尽可能保持精简并避免走我发现的那条路线有点脆弱,此服务不需要公开 $metadata 描述。

更新

我在 aspnet 示例中进行了一些挖掘,发现“CustomODataFormatter”示例似乎暴露了我需要修改的机制。但是,那里概述的 ODataSerializerProvider/ODataSerializer 设置根本不适用于属性路由(任何用 [Route("Some/Url")]) 定义的方法。

鉴于这似乎是我需要的,有谁知道属性路由和 odata 序列化程序提供程序机制是否应该一起工作?

【问题讨论】:

  • 你有什么问题?
  • 抱歉,我添加了一个包含明确问题的更新。
  • 谢谢,但很抱歉我不知道答案。

标签: asp.net-web-api json.net odata asp.net-web-api2


【解决方案1】:

[JsonIgnore] or [DataMember] 可用于忽略 json.net 序列化程序的属性。 webapi.odata 5.2 支持ODataRouteAttribute,例如here

【讨论】:

  • 我将通过自己的研究详细说明这个答案:ODataSerializer 提供程序仅适用于重量级 OData 端点:Web API 必须提前了解所有对象关系;所以普通的 [Route("url")] 属性将无法使用它。 ODataRoute 将起作用,但仅通过查看示例,它似乎还需要一个完整的 OData 端点。为了获得我想要的行为,我必须以某种方式连接到 Web API 序列化框架:不值得麻烦,我会坚持使用专用模型。
  • 链接失效,这里是更新的链接:aspnetwebstack.codeplex.com/SourceControl/latest#OData/test/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-31
  • 2013-09-09
  • 2013-01-30
  • 2013-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多