Возможно, вы захотите внедрить конечную точку OData для доступа вашего клиента.Серверные и клиентские библиотеки уже существуют для обеспечения следующих функциональных возможностей:
- Возможность установить доступ к вашим данным только для чтения
- Данные, запрашиваемые клиентом через LINQ
Теперь я не уверен, будет ли это решение аккуратно обеспечивать сериализацию / десериализацию дерева выражений;вам может потребоваться выполнить ручную работу, чтобы это произошло, поскольку вы имеете дело с объектами в памяти.
Большинство примеров использования OData, которые я видел, были связаны с использованием баз данных в качестве бэкэнда.Однако вы можете создать собственного поставщика OData для своих данных в памяти, а затем по-прежнему использовать преимущества общего протокола и расширенной клиентской библиотеки для этого протокола.Если вся цель сериализации / десериализации состоит в том, чтобы иметь возможность передавать данные через HTTP, OData уже решает это за вас.
Для быстрого примера конечной точки OData в действии, посетите Реализация переполнения стекаOData .Они внедрили решение, которое позволяет вам написать простой SQL-запрос для получения данных из StackOverflow.Хотя я не смог найти точную строку запроса, которую они используют для своего OData Service для тестового запроса, я заметил, что результаты снова сериализовались как JSON, когда я проверял ответ через Fiddler.Это хороший пример, чтобы увидеть силу OData.