2017-10-01 1 views
1

odataペイロードのjsonコンテンツをカスタマイズする必要があります。ODataペイロードの@odataプレフィックスを置き換えます。

{ 
    "@odata.context": "http://localhost:49644/v1.0/$metadata#Feeds", 
    "@odata.count": 6, 
    "value": [ 
     { 
      "id": 1, 

{ 
    "@MyCustomdata.context": "http://localhost:49644/v1.0/$metadata#Feeds", 
    "@MyCustomdata.count": 6, 
    "value": [ 
     { 
      "id": 1, 

に私は、私の場合、私は削除するのに必要な

http://odata.github.io/odata.net/が、私はこれに似た何かを持っていたカスタムODataResourceSerializer、ODataResourceSetSerializer

答えて

0

を使用しようとしましたODataLibを使用して " @ '接頭辞を使用して、従来のプロジェクトとの互換性を保ちます。

修正するには、ソースからMicrosoft.OData.CoreMicrosoft.AspNetCore.ODataを再コンパイルしてから、ODataJsonLightWriterUtils.WriteInstanceAnnotationNameを編集して、注釈のシリアル化方法を変更してください。

OData WebApiプロジェクトでは、ODataLibを使用してシリアル化を行いますが、通常のNugetパッケージではなくカスタムアセンブリとして両方を含めることができるように、両方をコンパイルする必要があります。

プロジェクトのためのソースはここにある:私の場合は

https://github.com/OData/Webapi/tree/feature/netcore

https://github.com/OData/odata.net

私はnetcoreapp2.0によ、メーリングリストへ。あなたは完全にodataプレフィックスを削除するにはDIに渡すことができる設定があり

:ソースプロジェクトをコンパイルすると、あまりにも多くを取得した場合

public virtual void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
{ 
    //... 
    var odata_options = new ODataSimplifiedOptions(){ EnableWritingODataAnnotationWithoutPrefix = true}; 
    //... 
    app.UseMvc(routeBuilder => 
    { 
     routeBuilder.Select().Expand().Filter().OrderBy().MaxTop(null).Count(); 
     // custom routing - ymmv 
     string odata_route_name = "ODataRoute"; 
     routeBuilder.MapODataServiceRoute(odata_route_name, "data", a => 
     { 
      a.AddService(Microsoft.OData.ServiceLifetime.Singleton, sp => model); 
      a.AddService<IODataPathHandler>(Microsoft.OData.ServiceLifetime.Singleton, sp => new DefaultODataPathHandler()); 
      a.AddService<IEnumerable<IODataRoutingConvention>>(Microsoft.OData.ServiceLifetime.Singleton, sp => ODataRoutingConventions.CreateDefaultWithAttributeRouting(odata_route_name, routeBuilder)); 
      a.AddService<ODataSerializerProvider>(Microsoft.OData.ServiceLifetime.Singleton, sp => new CIQODataSerializerProvider(sp, loggerFactory)); 
      a.AddService<ODataDeserializerProvider>(Microsoft.OData.ServiceLifetime.Singleton, sp => new DefaultODataDeserializerProvider(sp)); 
      a.AddService<ILoggerFactory>(Microsoft.OData.ServiceLifetime.Singleton, sp => loggerFactory); 
      a.AddService<ODataSimplifiedOptions>(Microsoft.OData.ServiceLifetime.Singleton, sp => odata_options); 
      // ... other specifics to my situation 
     }); 
     routeBuilder.EnableDependencyInjection(); 
     // mvc/api routes ...     
    }); 
} 

が、私はまた、nugetが提供するDLLを編集するhttps://github.com/0xd4d/dnSpyを試してみました。私はこれがうまくいくと思います。直接のDLL参照が使われるように、ODataLibへの依存関係を持つすべてのパッケージが削除されていることを確認するだけです。