A few months ago I published a roadmap for Simple.OData.Client development which I was trying to follow. Today I am happy to announce a major revision (in fact major rewrite) of the library that now supports OData protocols from 1 to 4 and both Atom and JSON payload.
To achieve that I based the library parsers and formatters on Microsoft’s ODataLib that exists in two incarnations: for OData versions 1 to 3 (Microsoft.Data.OData) and for OData version 4 (Microsoft.OData.Core). Both ODataLib libraries implement similar sets of classes and interfaces (even with the same names), but they have different type identities which makes them incompatible. To make them transparent to the clients, Simple.OData.Client uses adapters libraries that communicate with respective ODataLib assemblies. These pictures show the libraries dependencies.
In case you use OData from desktop apps, the easiest is just to continue using Simple.OData.Client NuGet package that has everything to consume OData feeds of any OData version. However, mobile applications are usually more cautious about program footprint, and since in most cases an application connects to a specific version of OData service using specific version of OData protocol, there is no need to drag a couple of megabytes of unused dependencies, and in that case I recommend to install a NuGet package of Simple.OData.Client just for the given OData protocol version. Here are the packages:
- Simple.OData.Client – supports all OData protocol versions, installs both sets of ODataLib components;
- Simple.OData.V3.Client – supports versions of 1 to 3 of OData protocol, installs Microsoft.Data.OData package and dependencies;
- Simple.OData.V4.Client – supports version 4 of OData protocol, installs Microsoft.OData.Core package and dependencies;
All packages support both Atom and JSON payload, but Atom payload is currently disabled in ODataLib V4 (should come later), so for the time being V4 clients can only use JSON.
Also note that Simple.OData.Client requires Microsoft.OData.Core 6.7.0 NuGet package and not the latest released 6.8.0. This is due to problems reading schemas with Enum types in the package 6.8.0 which I hope will be fixed soon.
Try it out, and if you find any issues please report them here.