2012-02-24 21 views
8

Jak mogę przekazać listę złożonych typów w ServiceStack? Na przykład mój wniosek DTO wygląda następująco:Jak przekazać listę typów złożonych w ciągu zapytania?

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

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

Jak mogę przekazać obiekt zserializowany przez HTTP get?

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

KeyValueDataContractDeserializer: Błąd konwersji wpisać: definicje typu powinny rozpocząć się od '{', oczekując zserializowaną typu 'Funduszem', dostał ciąg rozpoczynający się: asdf

Odpowiedz

10

ServiceStack analizuje kwerendy przy użyciu JSV Format jest to w zasadzie JSON z cytatami w stylu CSV (tzn. tylko potrzebuje cytatów, gdy twoja wartość ma znak escape).

Choć nie zdefiniowano niestandardowy Route tutaj, w większości przypadków zwyczaj trasa jest taka sama jak żądanie DTO która w tym przypadku jest test nie /Fundusze.

Więc zakładając własny trasy wygląda następująco:

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

można wywołać usługę za pośrednictwem QueryString jak:

http: // localhost: 49490/api/test Fundusze = [{klucz? : Key1, Percent: 1}, {Key: Key2, Percent: 2}]

Na marginesie Interfejsy na DTO są generalnie złym pomysłem, należy rozważyć unikanie (przynajmniej ograniczanie) jego użycia przez cały czas.

+0

Dziękuję, działa perferct! Co masz na myśli mówiąc "Interfejsy na DTO są generalnie złym pomysłem"? Jak byś to przekazał/zaprojektował w tym przypadku? –

+4

Chciałbym wziąć I z IList - to znaczy po prostu mieć listę. Jeśli nie dostarczysz konkretnych typów niż kilka serializatorów, które faktycznie obsługują interfejsy, muszą emitować informacje dynamiczne na przewodzie, niepotrzebnie napełniając ładunek i łącząc format z impulsem serializera. Nie ma również dobrych/ważnych powodów posiadania interfejsów na DTO. – mythz

Powiązane problemy