マイクロソフトは、2024年8月30日にASP.NET Core OData 9パッケージの提供を開始すると発表した。この新しいパッケージは、ASP.NET Coreを.NET 8のODataライブラリと一致させ、データがODataフォーマットでエンコードされる方法の内部詳細を変更する。マイクロソフトによると、これによりOData仕様に沿ったものになるという。
2024年8月、マイクロソフトはOData .NETライブラリをバージョン8.0.0に更新した。その中でもっとも重要な変更は、レガシーな.NET Frameworkのサポートをやめたことだ。このバージョンからは、.NET 8以降のみがサポートされる。レガシー.NET Frameworkを使用している開発者は、ODataライブラリのバージョン7.xを使用できる。2025年3月にメンテナンス・モードに移行するまで、積極的にサポートされる。
OData 8 ライブラリは、新しいJSONライターSystem.Text.Utf8JsonWriterを使用して、JSONペイロードのシリアライズとデシリアライズを行う。この新しいライターは、Microsoft.OData.Json.DefaultJsonWriterFactoryによって作成される古いライターであるJsonWriter
よりも、TextWriter
ベースではなくStream
ベースであるため、大幅に高速で、より少ないメモリしか必要としない。新しいライターはODataバージョン7.12.2から利用可能であったが、現在ではOData 8のデフォルト実装となっている。
開発者は、サービスビルダーでAddODataメソッドを呼び出し、ODataJsonWriterFactory
インスタンスを提供することで、必要に応じて古いライターを使用できる。
builder.Services.AddControllers().AddOData(options => options.EnableQueryFeatures().AddRouteComponents(routePrefix: string.Empty, model: modelBuilder.GetEdmModel(), configureServices: (services) =>{ services.AddScoped < Microsoft.OData.Json.IJsonWriterFactory > (sp => new Microsoft.OData.Json.ODataJsonWriterFactory());}));
新しいライターは、古いライターと同じ方法ではJSONをシリアライズしない。古いライターがそうであったように、すべての上位ASCII Unicode文字をエンコードしない。例えば、ギリシャ文字のような非ラテン記号をUnicodeの数列としてエンコードしない。その代わり、Unicode文字そのものを出力する。古いライターは、事実上すべての非ASCII文字を数字としてエンコードしていたため、ペイロードのサイズを大きくし、エンコード処理を遅くしていた。新しいJSONライターは、以前のバージョンで使用されていた小文字の代わりに、大文字のUnicode文字を出力する。
ASP.NET Core OData 9のもう1つの大きな変更点は、依存性注入の仕組みだ。以前のバージョンのODataライブラリは、ODataサービスを構成するために非標準のIContainerBuilderを使用していたが、更新されたライブラリは、.NETと同じ抽象化、すなわちIServiceProviderを使用している。
builder.Services.AddControllers().AddOData(options => options.EnableQueryFeatures().AddRouteComponents(routePrefix: string.Empty, model: modelBuilder.GetEdmModel(), configureServices: (services) =>{ services.AddDefaultODataServices(odataVersion:Microsoft.OData.ODataVersion.V4, configureReaderAction: (messageReaderSettings) => { // Relevant changes to the ODataMessageReaderSettings instance here }, configureWriterAction: (messageWriterSettings) => { // Relevant changes to the ODataMessageWriterSettings instance here }, configureUriParserAction: (uriParserSettings) => { // // Relevant changes to the ODataUriParserSettings instance here });}));
新しいODataライブラリには、レガシーな実装やJSONP形式などの古い標準の削除など、いくつかのマイナーな変更がある。完全なリストについては、開発者はOData 8 .NETライブラリのリリースノートを確認できる。
新しいASP.NET Core OData 9ライブラリは、NuGetパッケージとして配布されている。この新しいリリースは、過去6週間で150,000回ダウンロードされている。ASP.NET Core ODataのソースコードはGitHubで公開されており、リポジトリには現在458の未解決の問題がある。