2017-02-03 3 views
2

Newtonsoftを使用してWeb 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属性でこれをachiveすることができていませんでしたが、代わりにこの方法:

// 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への返信に基づいていますが、少し修正してあります。

関連する問題