如何在使用备用属性名称时查询OData

时间:2017-02-03 03:04:31

标签: c# odata

我正在使用Newtonsoft来更改web api json输出中的属性名称。

public class User : IEntity
{
    [Newtonsoft.Json.JsonProperty(PropertyName = "user_name"]
    public string Username { get; set; }
}

我已启用odata查询,以便我可以向请求添加查询。

[HttpGet]
[Route("api/users")]
[EnableQuery]
public IQueryable<User> GetUser()
{
    return dbContext.DbSet<User>();
}

当我使用备用属性名称进行查询时,它会失败。

  

GET / api / users?$ select = user_name

     

URI中指定的查询无效。找不到名为&#39; user_name&#39;

的媒体资源

如果我使用实体模型名称Username(对公众不可见),查询工作正常。如何在使用Newtonsoft处理反序列化时解决这个问题?

1 个答案:

答案 0 :(得分:2)

我无法使用Json.Property属性来实现这一点,而是采用这种方式:

// in class WepApiConfig    
ODataModelBuilder builder = new ODataConventionModelBuilder();
var conf = builder.EntitySet<User>("users");
conf.EntityType.Property(f => f.Username).Name = "user_name";

查询

GET /api/users?$select=user_name

现在应该可以使用(我的OData服务可以正常工作)

我的回答是基于对this question的回复,但稍作修正。