SystemTextJsonForCosmosDb 0.1.0
See the version list below for details.
dotnet add package SystemTextJsonForCosmosDb --version 0.1.0
NuGet\Install-Package SystemTextJsonForCosmosDb -Version 0.1.0
<PackageReference Include="SystemTextJsonForCosmosDb" Version="0.1.0" />
paket add SystemTextJsonForCosmosDb --version 0.1.0
#r "nuget: SystemTextJsonForCosmosDb, 0.1.0"
// Install SystemTextJsonForCosmosDb as a Cake Addin #addin nuget:?package=SystemTextJsonForCosmosDb&version=0.1.0 // Install SystemTextJsonForCosmosDb as a Cake Tool #tool nuget:?package=SystemTextJsonForCosmosDb&version=0.1.0
SystemTextJsonFoCosmosDb
A tiny package for using System.Text.Json with Cosmos DB.
Installing
Add the package to your project:
Using Package Manager
Install-Package SystemTextJsonForCosmosDb
PackageReference in your project file
<PackageReference Include="SystemTextJsonForCosmosDb" Version="0.1.0" />
Quick start (ASP.NET Core using Microsoft.Extensions.DependencyInjection)
Add the following code to your services registration code (e.g., in Startup's ConfigureServices
, or anywhere you're adding to your IServiceCollection
):
using System.Text.Json;
using SystemTextJsonForCosmosDb;
// replace with your options
JsonSerializerOptions mySerializerOptions = new()
{
MaxDepth = 64,
PropertyNamingPolicy = NamingPolicy.CamelCase,
};
services
.AddSystemTextJsonForCosmosDb()
.AddSingleton<IJsonSerializerOptionsProvider>(new JsonSerializerOptionsProvider(mySerializerOptions));
When you want to initialize a connection to Cosmos DB, you can inject the ICosmosClientOptionsProvider
like this:
namespace MyNamespace;
using System.Threading.Tasks;
using Microsoft.Extensions.Configuration;
using SystemTextJsonForCosmosDb;
internal class MyRepository
{
private CosmosClient client;
public MyRepository(ICosmosClientOptionsProvider clientOptionsProvider)
{
config = options.Value;
CosmosClientOptions clientOptions = clientOptionsProvider.GetCosmosClientOptions();
client = new(
// you should definitely be getting this from configuration, not hardcoding it...
"https://myaccount.documents.azure.com",
// You're using RBAC, not secret credentials, right?
new DefaultAzureCredential(),
clientOptions);
}
// ... methods that use the client in fun and interesting ways
}
Customizing
ICosmosSerializer
If you prefer to have full control over the serialization, perhaps because you already have a serializer implemented, you can implement the
ICosmosSerializer
interface and provide that instead:
services
.AddSystemTextJsonForCosmosDb()
.AddSingleton<ICosmosSerializer, MySerializer>();
NOTE: If both
ICosmosSerializer
ANDIJsonSerializerOptionsProvider
are registered,ICosmosSerializer
will be used.
The following converters are highly recommended to be used if you implement your own serializer:
CosmosDateTimeOffsetJsonConverter
CosmosDateTimeJsonConverter
JsonStringEnumConverter
CosmosNullableDateTimeOffsetJsonConverter
CosmosNullableDateTimeJsonConverter
PatchOperationJsonConverter
IJsonSerializerOptionsProvider
This interface exposes just one method: GetJsonSerializerOptions()
, which returns System.Text.Json.JsonSerializerOptions
.
When using IJsonSerializerOptionsProvider
, the library guarantees to:
- Not mutate your options. A new copy is created and used internally.
- Honor naming policies, except for two cases: the
id
andetag
/_etag
properties (case-insensitive) of any object being (de)serialized will be converted to"id"
and"_etag"
, respectively. - Preempt certain data type conversions:
DateTime
,DateTimeOffset
, and nullable variants will always use the formatyyyy-MM-ddTHH:mm:ss.fffffffZ
to conform to Cosmos DB standards.Microsoft.Azure.Cosmos.PatchOperation
will be converted using Cosmos DB naming, according to the RFC standard.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Microsoft.Azure.Cosmos (>= 3.35.3)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 7.0.0)
- System.Text.Json (>= 7.0.3)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.