この単純な例では、Web Api 2 + OData v4 サービスから JSON としてシリアル化されたオブジェクトを取得しようとしています。コントローラーには、annon の配列を返す関数 Test がバインドされています。オブジェクト。
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 )、次のような 2 つの空のオブジェクトの配列という奇妙な応答が返されます。
{
"@odata.context": "http://localhost:9010/odata/$metadata#Collection(System.Object)",
"value": [
{},
{}
]
}
私の実際のアプリでは、Newtonsoft の Json コンバーターを使用して、JSON 文字列にシリアル化されたオブジェクトを返しています。これは正常に動作しますが、この問題は依然として私を悩ませています。OData の既定のシリアライザーに関連するものだと思われますが、構成方法がわかりません。
それで、正しくシリアル化された複雑なオブジェクトを取得するような方法で edm 関数の戻りパラメータを構成することは可能ですか?
ありがとう!