Возможно ли изменить сериализацию по умолчанию для C# poco для documentDb? Свойство id, например, должно быть, должно быть строчным, но стандартная сериализация свойства Id - это верхний регистр. В идеале мы хотели бы, чтобы все свойства json начинались с символов нижнего регистра. Единственный способ, который мы нашли до сих пор, - это украсить свойства с помощью [JsonProperty (PropertyName = «id»)], но это не очень элегантно.Пользовательская сериализация C# poco's для DocumentDb
ответ
Вот несколько способов, чтобы получить строчную или верблюд регистра свойств в документе 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
Привет aliuy. Вопрос заключается не в том, как сериализовать на caml-case с помощью Json.NET, а в том, как изменить сериализатор по умолчанию для documentDb. –
Ах, извините - пересмотрен мой ответ! –
Хотя мне удалось изменить сериализацию по умолчанию в Json.NET (установив JsonConvert.DefaultSettings) и сохранить имена свойств в случае верблюда, запрос не работал. Я предполагаю, что DocumentDb использует чувствительный к регистру сопоставление имен свойств. Таким образом, в запросе obj.Id == document.id идентификаторы не совпадают. –
В настоящее время вы не можете изменить сериалайзер по умолчанию 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
Link сломана :( –
@CarlosG.fixed –
Несмотря на то, что клиент поддерживает пользовательские настройки сериализации, провайдер linq, похоже, игнорирует его. –
Возможность установки параметров JsonSerialization в API SDK DocumentDB в настоящее время разрабатывается командой Azure, поэтому она должна быть доступна в определенный момент в будущем: https://feedback.azure.com/forums/263030 -documentdb/ideas/6422364-allow-me-to-set-jsonserializersetting – abrown