Я пытаюсь использовать новую WebAPI бета-версию для создания веб-службы, которую я могу запрашивать, используя соглашения строки запроса OData и возвращать OData в формате Json . Я также хочу использовать OData 2.0 (вместо 1.0).
Хотя не похоже, что он поддерживает опцию $ select , а заголовки, похоже, могут переопределить опцию $ format , возвращая общий вид IQueryable
обеспечить поддержку большинства других опций запроса, которые мне нужны.
Я действительно борюсь с тем, как лучше всего предоставить объекты Json, которые соответствуют спецификации OData 2.0. WebAPI просто возвращает нормальные данные Json при запросе. Например, если я выполню запрос GET чего-то вроде этого ...
http://localhost:XXXXX/vendor/?$filter=RONUMBER eq '2597385'&$select=VENDORID,VENDORNAME&$top=1&$format=Json
.. чтобы получить верхний удар, соответствующий указанному RONumber на моей машине разработчика, я получаю ответ, содержащий следующий Json ...
[{"MEPartNumber":"11-2222-3-4444","MFGPartNumber":"123456-123","MFGSerialNumber":"ABC123","RONumber":"987654321","VendorId":"1234567","VendorName":"ACME SERVICE CENTER"}]
Мне нужен Json, который соответствует спецификации OData 2.0. Нечто подобное ...
OData V2: {
"d" : {
"results": {
"__metadata": {
"uri": "http://someserver/foo/vendor(1)",
"type": "Vendor"
},
"MEPartNumber": "11-2222-3-4444",
"MFGPartNumber": "123456-123",
"MFGSerialNumber": "ABC123",
"RONumber":"987654321",
"VendorId":"1234567",
"VendorName": "ACME SERVICE CENTER"
}
}
}
Полагаю, я мог бы написать пользовательский MediaTypeFormatter
, чтобы получить желаемую структуру. Я также мог бы изменить мои возвращенные объекты, чтобы имитировать структуру желаемого Json. Помимо этих двух вариантов, кто-нибудь знает, какой умный способ заставить WebAPI давать мне отформатированные в OData 2.0 объекты Json?