Markus Ahlstrand
Markus Ahlstrand

Reputation: 91

Custom serialisation of C# poco's for DocumentDb

Is it possible to change the default serialisation of C# poco's for documentDb? The id-property for instance seem to be required to be lower case, but the default serialisation of the Id property is upper case. Ideally we would like all json properties to start with lower case characters. The only way we found so far is to decorate the properties with [JsonProperty(PropertyName = "id")] but it's not very elegant.

Upvotes: 6

Views: 5029

Answers (2)

Andrew Liu
Andrew Liu

Reputation: 8119

Here a couple ways to get lower-case or camel-case properties in your DocumentDB document:

  • Use [JsonProperty(PropertyName = "id")] as you mentioned.

  • Change the C# property in the POCO to lower case.

  • Have your POCO extend Microsoft.Azure.Documents.Document from the DocumentDB .NET Library, which has an Id property (that I believe uses [JsonProperty(PropertyName = "id")] behind the scenes).

  • Instead of using the default serializer, you can use the Json.NET library to serialize using it's camel-case resolver. Mats Karlsson has a pretty good blog post on this here: http://www.matskarlsson.se/blog/serialize-net-objects-as-camelcase-json

Edit: JSON serializer settings is supported in the DocumentDB .NET SDK 1.16.0+. https://learn.microsoft.com/en-us/azure/cosmos-db/sql-api-sdk-dotnet

Upvotes: 3

Michalis
Michalis

Reputation: 543

Currently you can't change the default serializer of DocumentDB, you can however serialize it using your own library or JSON.NET and store the JSON string to the collection by doing:

await client.CreateDocumentAsync(collectionLink, Resource.LoadFrom<Document>(stream)); 

where stream a stream to your json string (can be from a file, or from an in-memory string, etc). You can find more info on the internet archive's edition of my blog post, which used to reside here

Edit: JSON serializer settings is supported in the DocumentDB .NET SDK 1.16.0+. https://learn.microsoft.com/en-us/azure/cosmos-db/sql-api-sdk-dotnet

Upvotes: 5

Related Questions