Сериализация OData

Я пытался найти решение для настраиваемой сериализации объекта, возвращаемого контроллером OData, последние 2 месяца !Пожалуйста помоги!!!Вариант использования довольно прост, и я упростил его еще больше, чтобы добраться до проблемной точки.У меня есть несколько виртуальных полей, прикрепленных к некоторым объектам в моей модели, например:Теперь предположим, что клиент настроил VirtualField1 как «CompanyName».Все, что я хочу сделать, это создать собственный сериализатор и десериализатор JSON, который:Любой запрос GET для клиента (и, конечно, клиентов, то есть IQueryable ) будет проходить через этот сериализатор, который заменит имя поля «VirtualField1» на «CompanyName» в случае коллекции для каждого клиента.Любой запрос POST будет проходить через противоположную замену, то есть замену «CompanyName» на «VirtualField1».** Фактическая логика замены немного сложнее, но идея та же.Я прочитал все, что мог найти Google, но не нашел ни одного рабочего примера.Вот несколько ссылок:https://aspnetwebstack.codeplex.com/wikipage?title=OData%20formatter%20extensibility** Текущий API OData теперь немного отличается, но я решил, что принципы те же.настройка вывода odata из веб-api asp.netИспользование OData в webapi для свойств, известных только во время выполненияОбщим для всех ссылок (и любой информации, которую я нашел в этом отношении) является то, что я должен унаследовать от DefaultODataSerializerProvider и добавить его в свои средства форматирования:На WebApiConfig.cs:и фактический поставщик и сериализатор:** edmType.IsEntity () никогда не является истинным для результатов IQueryable, поэтому он никогда не создает конкретный сериализатор.Если я принудительно создаю создание, он все равно не сломается в CreateEntity (или любом другом методе создания в этом отношении).Если я изменю конкретный сериализатор на наследование от ODataCollectionSerializer:иОн останавливается на точке останова на WriteObject, но не работает, и база выдает следующее: «Тип 'Models.Customer', указанный в качестве типа элемента коллекции, не является примитивным или сложным. ODataCollectionWriter может записывать только коллекции примитивных или сложных значений."Еще одна забавная вещь, даже если я вставлю предположительно поставщиков по умолчанию:независимо от их положения, то есть либо в начале:или в конце:Функциональность OData, то есть - например: $ exapnd как в /odata /Customers? $ Expand = Изображения полностью исчезают и вообще не работают (вот ответ):изображения в этом случае не расширяются, хотя без добавления пользовательских форматеров они это делают.Есть мысли, идеи, направления ???
7 голосов | спросил Tomer 28 Jpm1000000pmTue, 28 Jan 2014 15:26:09 +040014 2014, 15:26:09

0 ответов


Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132