我正在使用 Newtonsoft 更改 web api json 输出上的属性名称。
public class User : IEntity
{
[Newtonsoft.Json.JsonProperty(PropertyName = "user_name"]
public string Username { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我已启用 odata 查询,以便我可以向请求添加查询。
[HttpGet]
[Route("api/users")]
[EnableQuery]
public IQueryable<User> GetUser()
{
return dbContext.DbSet<User>();
}
Run Code Online (Sandbox Code Playgroud)
当我使用备用属性名称进行查询时,它失败了。
GET /api/users?$select=user_name
URI 中指定的查询无效。找不到名为“user_name”的属性
如果我使用实体模型名称Username(对公众不可见),则查询工作正常。如何在仍然使用 Newtonsoft 处理反序列化的同时解决这个问题?
我无法使用 Json.Property 属性实现此目的,而是通过以下方式实现:
// in class WepApiConfig
ODataModelBuilder builder = new ODataConventionModelBuilder();
var conf = builder.EntitySet<User>("users");
conf.EntityType.Property(f => f.Username).Name = "user_name";
Run Code Online (Sandbox Code Playgroud)
查询
GET /api/users?$select=user_name
Run Code Online (Sandbox Code Playgroud)
现在应该可以工作(使用我的 OData 服务可以正常工作)
我的回答是基于对这个问题的回答,但有一些小的更正。