Клиент документов Azure игнорирует атрибут JsonProperty

Я использую приложение Azure Function. В приложении я использую пакет Microsoft.Azure.DocumentDB v2.9.2 для работы с CommosDB. Моя сущность:

public abstract class Entity
{
    [JsonProperty("id")]
    public string id { get; set; }
}

public class MyLog : Entity
{
    [JsonProperty("createDate")]
    public DateTime CreateDate { get; set; }
}

Когда я сериализую MyLog с Newtonsoft.Json, я вижу, что свойство CreateDate имеет стиль верблюжьего регистра и выглядит точно так же, как упомянуто в JsonProperty, но когда я записываю свою сущность в CosmosDB с помощью метода CreateDocumentAsync, я вижу, что CreateDate теперь имеет регистр pascal и выглядит как CreateDate. Хочу отметить, что ContractResolver не используется. Я не могу найти другого места, где случай паскаля можно применить к сериализации сущностей.

[ОБНОВЛЕНИЕ]

Когда я запускаю тесты, я вижу, что именование свойств в БД правильное (с учетом JsonProperty). Это неправильно, только когда azure func пишет в БД

var policy = new ConnectionPolicy();
policy.PreferredLocations.Add("Germany North");
documentClient = new DocumentClient(endPoint, key, policy);
await documentClient.OpenAsync();

...

await documentClient.CreateDocumentAsync(UriFactory.CreateDocumentCollectionUri(databaseName, collectionName), document);

[/ОБНОВЛЕНИЕ]

Может кто-нибудь подсказать, какие еще варианты могут привести к такому поведению?


person Alexey Klipilin    schedule 31.03.2020    source источник
comment
Зачем поля документа в CosmosDB должны быть в верблюжьем регистре?   -  person Oliver    schedule 31.03.2020
comment
@Oliver На самом деле я не принимаю здесь решений, я занимаюсь рефакторингом существующего проекта, и мне просто нужно выяснить причину такого поведения.   -  person Alexey Klipilin    schedule 31.03.2020
comment
Настроен ли пользовательский сериализатор, как описано здесь?   -  person Oliver    schedule 31.03.2020
comment
@Oliver упомянул, что документ использует немного другой клиент, в моем случае это DocumentClient, но в опциях не указан специальный сериализатор, более того, когда я запускаю тесты, я вижу, что имена свойств в БД указаны правильно. Это неправильно, только когда azure func пишет в БД   -  person Alexey Klipilin    schedule 31.03.2020
comment
Хорошо, не могли бы вы опубликовать свой код DocumentClient в дополнение к POCO, которые вы подробно описали?   -  person Oliver    schedule 31.03.2020
comment
@Oliver обновил квест с кодом создания DocumentClient.   -  person Alexey Klipilin    schedule 31.03.2020


Ответы (1)


Итак, я выяснил причину такого поведения. Функция Azure v1 с .NET 4.7.2 по умолчанию использует DataContractJsonSerializer, а атрибут JsonProperty не учитывается. В тестах используется сериализатор NewtonSoft json, поэтому используются атрибуты.

person Alexey Klipilin    schedule 01.04.2020
comment
Я только что вернулся, чтобы еще раз взглянуть на это. Рад, что вы разобрались. Есть ли какая-либо документация, на которую вы можете сослаться в своем ответе? - person Oliver; 01.04.2020