2014-02-15 3 views
1

У меня есть весовая установка, где я использую Web API 2 с OData, но не создаю конечную точку «/ odata» с сопровождающими метаданными «/ odata/$», а вместо этого просто использую стандартные ApiController с маршрутизация атрибутов и методы Get, помеченные с помощью переопределения [Queryable]: [InlineCountQueryable], подробно описанные здесь Web API, OData, $inlinecount and testing.Queryable Web API 2 Сериализация OData

Все это работает очень хорошо, за исключением того, что я могу показывать только выделенные классы моделей без каких-либо коллекций или свойств объектов, поскольку сериализатор JSON сериализует весь граф объектов. Мое идеальное поведение состояло бы в том, чтобы все коллекции полностью игнорировались и свойства объекта включались только в $ expand.

Я считаю, что это может быть сделано для работы, потому что OData Web Api 2 scaffold VS 2013 создает над контекстом фреймворка сущности, имеет подобное поведение, но я хотел бы сохранить это как можно более худым и избежать этого маршрута, как я нашел это будет немного хрупким, и эта услуга не должна раскрывать описание метаданных $.

Update

Я сделал некоторые раскопки в образцах САШ и нашел «CustomODataFormatter» образец, который, кажется, чтобы выставить оборудование мне нужно изменить .. однако установка ODataSerializerProvider/ODataSerializer описанной там не работает с атрибутной маршрутизацией вообще (любой метод, определенный с помощью [Route («Some/Url»)]).

Учитывая, что это похоже на то, что мне нужно, кто-нибудь знает, должна ли быть организована маршрутизация атрибута, а механизм провайдера сериализации odata должен работать вместе?

+0

Что вы хотите сказать? –

+0

Извините, я добавил обновление, которое содержит явный вопрос. – SourceSimian

+0

Спасибо, но жаль, что я не знаю ответа. –

ответ

0

[JsonIgnore] or [DataMember] можно использовать для игнорирования свойств для сериализатора json.net. webapi.odata 5.2 поддерживает ODataRouteAttribute, пример: here.

+0

Я расскажу немного об этом ответе своими исследованиями: поставщик ODataSerializer работает только с супертяжелой точкой доступа OData: веб-API должен знать обо всех объектных отношениях заранее; поэтому нормальный атрибут [Route ("url")] не будет работать с ним. ODataRoute будет работать, но, просто взглянув на пример, он также нуждается в полной конечной точке OData. Чтобы получить такое поведение, я хотел бы как-то подключиться к структуре сериализации Web API: не стоит проблем, я просто буду придерживаться специализированных моделей. – SourceSimian

+0

Сломанная ссылка, вот обновленная ссылка: http://aspnetwebstack.codeplex.com/SourceControl/latest#OData/test/System.Web.OData.Test/OData/Routing/AttributeRoutingTest.cs –

Смежные вопросы