2012-02-24 10 views
8

Come passare un elenco di tipi complessi in ServiceStack? Ad esempio, il mio DTO richiesta è simile al seguente:Come passare un elenco di tipi complessi nella stringa di query?

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

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

Come posso passare l'oggetto serializzato tramite HTTP get?

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

KeyValueDataContractDeserializer: Errore durante la conversione di digitare: definizioni tipo dovrebbero iniziare con un '{', aspettandosi di tipo 'Fondo' serializzato, ha ottenuto stringa che inizia con: asdf

risposta

10

ServiceStack analizza il queryString utilizzando lo JSV Format è fondamentalmente JSON con le virgolette in stile CSV (cioè richiede solo virgolette quando il valore ha un carattere di escape).

Anche se non è stato definito un percorso personalizzato qui, nella maggior parte dei casi l'itinerario personalizzato è la stessa come la vostra richiesta DTO che in questo caso è prova non /fondi.

Quindi, supponendo un percorso personalizzato appare come:

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

È possibile chiamare il servizio tramite un QueryString come:

http: // localhost: 49490/api/test Fondi = [{Key? : Chiave 1, Percentuale: 1}, {Chiave: Chiave2, Percentuale: 2}]

Nota a margine Le interfacce su DTO sono in genere una cattiva idea, si dovrebbe considerare di evitare (almeno limitando) il suo uso in ogni momento.

+0

Grazie, funziona perferct! Cosa intendi esattamente con "Le interfacce su DTO sono generalmente una cattiva idea"? Come passeresti/progetterai in questo caso? –

+4

Prenderei I in uscita da IList, ovvero Lista. Se non si forniscono tipi concreti rispetto ai pochi serializzatori che effettivamente supportano le interfacce devono emettere informazioni di tipo dinamico sul cavo, inutilmente gonfiando il payload e accoppiando il formato al impl serializzatore. Non ci sono buoni motivi validi per avere interfacce su DTO. – mythz

Problemi correlati