2016-05-27 15 views
10

Xét tài liệu { "userName": "user1" } lưu trữ trong bộ sưu tập dùng, và User lớp sau:Làm thế nào để báo cho DocumentDB SDK sử dụng camelCase trong khi truy vấn LINQ?

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

Với các thiết lập JSON.net sau:

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

Khi tôi truy vấn với LINQ như vậy:

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 is null. Thay đổi tài liệu để có một vỏ pascal hoặc POCO để sử dụng một vỏ lạc đà giải quyết vấn đề. Tất nhiên tôi không muốn bất kỳ ai trong số đó vì tôi muốn các đối tượng JSON của tôi và các đối tượng C# được "standarized".

Làm cách nào để tôi có thể yêu cầu DocumentDB SDK ánh xạ tên thuộc tính của đối tượng bằng cách sử dụng vỏ camel, tương tự như JSON.net?

+0

[câu trả lời này] (http://stackoverflow.com/a/25879197/272109) có giải quyết được sự cố của bạn không? Nó không chính xác là một câu hỏi trùng lặp, nhưng tôi tin rằng câu trả lời được công bố bao gồm những gì bạn đang tìm kiếm. –

Trả lời

15

Nhà cung cấp DocumentDB LINQ không nhận được JsonConvert.DefaultSettings. Nói chung, bạn có thể sử dụng DefaultSettings để kiểm soát camelCase, nhưng đối với những thuộc tính bạn muốn sử dụng trong một mệnh đề LINQ Where phải có tên được đặt rõ ràng bằng cách sử dụng thuộc tính JsonProperty trên DTO của bạn.

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

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

Mặc dù hơi tẻ nhạt và là nguồn tốt cho lỗi, nhưng đây dường như là lựa chọn duy nhất của bạn ngay bây giờ.

+3

wow, đó là một con số thấp! –

+0

cảm ơn cho câu trả lời, điều này đã giết chết các truy vấn của tôi – vip32

+0

cảm ơn cho câu trả lời! điều này cũng đã giết chết các truy vấn của tôi. Bây giờ tôi đang chuyển từ biểu thức LINQ sang SQL. –

Các vấn đề liên quan