2017-02-03 9 views
2

Я использую Newtonsoft для изменения имен свойств на веб-выходе api json.Как запросить OData при использовании альтернативных имен свойств

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/пользователей? $ Выберите = user_name

Запрос, указанный в URI не является действительным. Не удалось найти свойство с именем «user_name»

Запрос работает нормально, если я использую имя сущность модели, Username (которая не видна публике). Как я могу исправить это, продолжая использовать Newtonsoft для десериализации?

+0

Как и http://stackoverflow.com/questions/33663255/odata-entity-property-serialization-name-different-than-c-sharp-variable-name – user845279

ответ

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, но с небольшими исправлениями.

 Смежные вопросы

  • Нет связанных вопросов^_^