2014-09-16 3 views
5

Возможно ли изменить сериализацию по умолчанию для C# poco для documentDb? Свойство id, например, должно быть, должно быть строчным, но стандартная сериализация свойства Id - это верхний регистр. В идеале мы хотели бы, чтобы все свойства json начинались с символов нижнего регистра. Единственный способ, который мы нашли до сих пор, - это украсить свойства с помощью [JsonProperty (PropertyName = «id»)], но это не очень элегантно.Пользовательская сериализация C# poco's для DocumentDb

+0

Возможность установки параметров JsonSerialization в API SDK DocumentDB в настоящее время разрабатывается командой Azure, поэтому она должна быть доступна в определенный момент в будущем: https://feedback.azure.com/forums/263030 -documentdb/ideas/6422364-allow-me-to-set-jsonserializersetting – abrown

ответ

1

Вот несколько способов, чтобы получить строчную или верблюд регистра свойств в документе DocumentDB:

  • Используйте [JsonProperty(PropertyName = "id")], как вы упомянули.

  • Измените свойство C# в POCO на нижний регистр.

  • Попросите ПОКО продлить Microsoft.Azure.Documents.Document от DocumentDB .NET Library, который имеет свойство Id (что я считаю использует [JsonProperty(PropertyName = "id")] за кадром).

  • Вместо использования стандартного сериализатора вы можете использовать библиотеку Json.NET для сериализации с помощью ревербера для верблюжьего случая. Матс Карлссон имеет довольно хороший пост в блоге на этом здесь: http://www.matskarlsson.se/blog/serialize-net-objects-as-camelcase-json

Edit: настройки Serializer JSON поддерживается в DocumentDB .NET SDK 1.16.0+. https://docs.microsoft.com/en-us/azure/cosmos-db/sql-api-sdk-dotnet

+0

Привет aliuy. Вопрос заключается не в том, как сериализовать на caml-case с помощью Json.NET, а в том, как изменить сериализатор по умолчанию для documentDb. –

+0

Ах, извините - пересмотрен мой ответ! –

+1

Хотя мне удалось изменить сериализацию по умолчанию в Json.NET (установив JsonConvert.DefaultSettings) и сохранить имена свойств в случае верблюда, запрос не работал. Я предполагаю, что DocumentDb использует чувствительный к регистру сопоставление имен свойств. Таким образом, в запросе obj.Id == document.id идентификаторы не совпадают. –

4

В настоящее время вы не можете изменить сериалайзер по умолчанию DocumentDB, однако вы можете сериализовать его, используя свою собственную библиотеку или Json.NET и хранить строку JSON в коллекцию, выполнив:

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

, где поток поток в вашу строку json (может быть из файла или из строки в памяти и т. д.). Вы можете найти более подробную информацию о internet archive's edition of my blog post, который used to reside here

Edit: настройки Serializer JSON поддерживается в DocumentDB .NET SDK 1.16.0+. https://docs.microsoft.com/en-us/azure/cosmos-db/sql-api-sdk-dotnet

+2

Link сломана :( –

+1

@CarlosG.fixed –

+0

Несмотря на то, что клиент поддерживает пользовательские настройки сериализации, провайдер linq, похоже, игнорирует его. –