在這個簡單的例子中,我試圖讓從網絡API 2 +的OData v4的服務序列化爲JSON對象。控制器綁定函數Test返回一個annon數組。對象。網頁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字符串與Newtonsoft的Json的轉換器對象 - 工作正常,但這個問題仍然困擾着我。我懷疑這與OData的默認序列化程序有關,但我不清楚如何配置它。
那麼,是不是可以配置EDM函數的返回參數在這樣的方式,我會得到正確的序列化複雜的對象?
謝謝!
我不認爲odata是設計用於機智的h這樣的匿名類型,但我沒有足夠的信心發佈這個答案!我認爲你需要定義一個類型,將它添加到模型構建器中(並將返回
我忘了提及 - 即使我聲明瞭某種類型,然後返回(),結果也是一樣的:\ –