2012-02-24 40 views
8

Làm cách nào để chuyển danh sách các loại phức tạp trong ServiceStack? Ví dụ: DTO yêu cầu của tôi trông giống như sau:Làm cách nào để chuyển danh sách các loại phức tạp trong chuỗi truy vấn?

//Request DTO 
public class Test 
{ 
    public IList<Fund> Funds { get; set; } 
} 

public class Fund 
{ 
    public string Key { get; set; } 
    public int Percent { get; set; } 
} 

Làm cách nào để chuyển đối tượng được tuần tự hóa qua HTTP get?

http://localhost:49490/api/funds={ ?? } 

KeyValueDataContractDeserializer: Lỗi khi chuyển sang gõ: Loại định nghĩa nên bắt đầu với một '{', mong serialized gõ 'Quỹ', có chuỗi bắt đầu với: asdf

Trả lời

10

ServiceStack phân tích các chuỗi truy vấn sử dụng các JSV Format này về cơ bản là JSON với các dấu ngoặc kép theo phong cách CSV (tức là chỉ cần báo giá khi giá trị của bạn có một char thoát).

Mặc dù bạn chưa xác định một lộ Tuỳ chỉnh ở đây, trong nhiều trường hợp đường tùy chỉnh của bạn cũng giống như yêu cầu của bạn DTO mà trong trường hợp này là thử nghiệm không /quỹ.

Vì vậy, giả định một lộ trình tùy chỉnh hình như:

Routes.Add<Test>("/test"); 

Bạn có thể gọi dịch vụ của bạn thông qua một QueryString như:

http: // localhost: 49.490/api/kiểm tra Quỹ = [{Key? : Key1, Phần trăm: 1}, {Khóa: Phần 2, Phần trăm: 2}]

Mặt khác, giao diện trên DTO thường là ý tưởng tồi, bạn nên tránh (ít nhất là hạn chế) việc sử dụng nó mọi lúc.

+0

Cảm ơn bạn, hoạt động perferct! Bạn có ý nghĩa gì với "Giao diện trên DTO thường là một ý tưởng tồi"? Làm thế nào bạn sẽ vượt qua/thiết kế trong trường hợp này? –

+4

Tôi sẽ đưa tôi ra khỏi IList - tức là chỉ có Danh sách. Nếu bạn không cung cấp các loại cụ thể hơn so với vài serializers thực sự hỗ trợ các giao diện phải phát ra thông tin kiểu động trên dây, không cần thiết phải làm tăng tải trọng và ghép nối định dạng với trình cắm thêm serializer. Cũng không có lý do hợp lý để có giao diện trên DTO. – mythz

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