我正在使用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处理反序列化时解决这个问题?
答案 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的回复,但稍作修正。