Как сообщить DocumentDB SDK использовать camelCase во время запроса linq?

Учитывая документ { "userName": "user1" }, хранящийся в коллекции пользователя, и следующий User класс:

public class User
{
        public string Id { get; set; }
        public string UserName { get; set; }
}

Со следующими настройками JSON.net:

JsonConvert.DefaultSettings = () =>
{
    return new JsonSerializerSettings
    {
       ContractResolver = new CamelCasePropertyNamesContractResolver(),
    };
};

Когда я запрашиваю Linq как таковой:

var t = _client.CreateDocumentQuery<User>(_collection.SelfLink)
            .Where(u => u.UserName == "user1").AsDocumentQuery().ExecuteNextAsync();

t.Wait();

var users = t.Result;
var user = users.FirstOrDefault();

User имеет значение null. Изменение документа, чтобы иметь корпус Pascal или POCO для использования корпуса верблюда, решает проблему. Конечно, я не хочу никого из них, поскольку я хочу, чтобы объекты JSON и объекты С# были "стандартизированы".

Как я могу сообщить SDK DocumentDB для сопоставления имен свойств объекта с помощью верблюжьей оболочки, аналогичной JSON.net?

Ответ 1

Поставщик DocumentDB LINQ не подбирает JsonConvert.DefaultSettings. В общем случае вы можете использовать DefaultSettings для управления camelCase, но для тех свойств, которые вы хотите использовать в предложении LINQ Where, должно быть явно указано имя с использованием атрибута JsonProperty на вашем DTO.

public class User
{
    public string Id { get; set; }

    [JsonProperty("userName")]
    public string UserName { get; set; }
}

Хотя это немного утомительно и является хорошим источником ошибок, теперь это ваш единственный вариант.