在这个简单的示例中,我试图从 Web Api 2 + OData v4 服务中获取序列化为 JSON 的对象。控制器具有绑定函数 Test,它返回一个 annon 数组。对象。
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": [
{},
{}
]
}
在我的真实应用程序中,我使用 Newtonsoft 的 Json 转换器将对象序列化为 JSON 字符串 - 效果很好,但这个问题仍然困扰着我。我怀疑这与 OData 的默认序列化程序有关,但我不清楚如何配置它。
那么,是否可以以这样的方式配置 edm 函数的返回参数,以便正确序列化复杂对象?
谢谢!