В этом простом примере я пытаюсь получить объект, сериализованный как JSON из службы Web Api 2 + OData v4. Контроллер имеет связанную функцию Test, возвращающую массив annon. объекты.Web Api 2 с OData v4 - Связанная функция, возвращающая сложный объект
public class ProductsController : ODataController
{
[HttpGet]
public IHttpActionResult Test(int key)
{
var res = new[]
{
new { Name = "a", Value = new[] { 1, 2, 3 } },
new { Name = "b", Value = new[] { 2, 4, 5 } }
// this also produces same result
// new { Name = "a", Value = "c" },
// new { Name = "b", Value = "c" }
};
return this.Ok(res);
}
}
Edm построен этот кусок кода:
ODataModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<Product>("Products");
var productType = builder.EntityType<Product>();
var f = productType.Function("Test").Returns<object>();
когда я делаю запрос к сервису (например, http://localhost:9010/odata/Products(33)/Default.Test.) Я получаю странный ответ - массив из двух пустых объектов, как это:
{
"@odata.context": "http://localhost:9010/odata/$metadata#Collection(System.Object)",
"value": [
{},
{}
]
}
в моем реальном приложении я возвращаю объект сериализуется в строку JSON с преобразователем Json Newtonsoft в - что работает хорошо, но эта проблема до сих пор беспокоит меня. Я подозреваю, что это связано с сериализатором по умолчанию для OData, но мне непонятно, как его настроить.
Итак, можно ли настроить параметр возвращаемой функции edm таким образом, чтобы я мог правильно сериализовать сложный объект?
Спасибо!
Я не думаю, что одата предназначена для работы с остроумием h анонимного типа вроде этого, но я недостаточно уверен, чтобы опубликовать это как ответ!Я думаю, вам нужно определить тип, добавить его в построитель модели (и изменить Returns
Я забыл упомянуть - даже если я объявляю какой-то тип, а затем. Возвращает(), результат такой же: \ –