Microsoft released OData .NET (ODL) 9.0.0 Preview 3, the latest preview iteration of the OData .NET client and core libraries, continuing the modernisation effort of the library. This preview focuses on safer default behaviours, runtime API cleanup, and closer conformance with the OData specification as the team works toward a stable 9.x release.
For context, the current stable release of the core OData .NET libraries (e.g., Microsoft.OData.Core) remains on 8.4.x line on NuGet, with version 8.4.3 as the most recent stable package from that series. This stable branch implements OData v4/v4.01 support and remains widely used in production today, while the 9.x releases are still in preview.
Preview 3 continues conventions introduced in earlier 9.x previews but tightens behaviours based on developer feedback and alignment with the OData specifications:
- Action query execution now uses
SingleOrDefault()semantics for nullable references, reducing unexpected exceptions for common null responses while retaining strict checks for non-nullable values. - Removal of legacy serialisation constructors tied to
ISerializable, eliminating build warnings on modern SDKs. - Dropping the older
CsdlTargetconcept and deprecating obsolete return type accessors in favour of newer EDM interfaces. - Obsoleted APIs around return type property (
ReturnType) onIEdmOperationhave also been fully replaced with the newerIEdmOperationReturnabstraction.
Together, these changes reflect a push toward runtime compatibility with .NET 8/9/10, lower allocation patterns (e.g., adding ReadOnlySpan lookup overloads), and reliance on the platform’s built-in APIs.
A key behavioural change in Preview 3 is the enforcement of structured type deserialization for untyped values (no more ReadUntypedAsString toggles), bringing runtime behaviour into closer alignment with the official OData JSON format. Additionally, untyped numeric values now infer specific CLR numeric types by default, with a compatibility flag for legacy results (numbers parsed as decimal).
Upgrading from the stable 8.x line to the 9.x preview NuGet packages should be treated as a breaking change in places: developers need to review nullable return handling, expected untyped JSON shapes, and any reliance on removed legacy APIs. Because the 9.x releases are still in preview, they are not recommended for production use without careful testing.
The broader OData ecosystem continues evolving; for example, ASP.NET Core OData packages have moved independently into their own 9.x+ series (including stable releases like Microsoft.AspNetCore.OData 9.4.x), which signals that service-side and client-side OData stacks are advancing in parallel.
Developers interested in contributing feedback or tracking stabilisation plans can follow the OData/odata.net GitHub repository and the official OData blog for preview announcements, migration guidance, and roadmap signals toward the eventual stable 9.0 release
