如何使用OData原语或复杂类型

本文关键字:复杂 类型 原语 何使用 OData | 更新日期: 2023-09-27 18:18:49

我第一次使用OData,并具有以下属性的模型实体:

public IEnumerable<string> Genres { get; set; }
public IEnumerable<string> GenresFiltered { get; set; }

当我通过web调用从模型中检索数据时,我得到以下消息:

'类型'xxxx'上的属性' types '不是一个有效的属性。不支持类型为原语集合或复杂类型的属性

是否有一种方法来解决这个错误,以显示Odata中的字符串列表?

如何使用OData原语或复杂类型

奇怪。我写了一个小的测试web api odata服务,它工作。代码如下:

WebApiConfig.cs

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
        builder.EntitySet<Foo>("Foos");
        config.MapODataServiceRoute("odata", "odata", builder.GetEdmModel());
    }
}

模型类

public class Foo
{
    public string ID { get; set; }
    public IEnumerable<string> Genres { get; set; }
}

控制器类

public class FoosController : ODataController
{
    // GET odata/Foos
    [EnableQuery]
    public IHttpActionResult Get()
    {
        return Ok(FakeData.GetFoos().AsQueryable());
    }
}

然后我尝试http://localhost:37312/odata/Foos,结果是

{
"@odata.context": "http://localhost:37312/odata/$metadata#Foos",
"value": [
    {
        "ID": "1",
        "Genres": [
            "aaa",
            "bbb"
        ]
    },
    {
        "ID": "2",
        "Genres": [
            "ccc"
        ]
    }
]

}