2012-02-24 11 views
8

ServiceStackで複合型のリストをどのように渡すのですか?たとえば、私のRequest DTOは次のようになります。クエリ文字列で複雑な型のリストを渡すには?

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

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

HTTP getを介してシリアル化されたオブジェクトを渡すにはどうしたらいいですか?

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

KeyValueDataContractDeserializer:エラータイプへの変換:型定義は、 '{'、期待してシリアル化されたタイプ '基金' で開始する必要があり、で始まる文字列を得た:

答えて

10

ServiceStackを使用してクエリ文字列解析しASDF JSV Formatこれは基本的にCSV形式の引用符付きのJSONです(つまり、値にエスケープ文字がある場合にのみ引用符が必要です)。あなたがここにカスタムルートを定義していないが、

は、ほとんどの場合、カスタムのルートは、この場合にはテストない/資金であるあなたの要求DTOと同じです。だから、カスタムルートを想定し

は、次のようになります。

します。http:// localhost:

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

あなたのようなのQueryStringを経由してあなたのサービスを呼び出すことができますか?49490/API /テストファンド= [{キー:Key1、Percent:1}

DTOのインターフェイスは一般的には悪い考えであり、常にその使用を避ける(少なくとも制限する)ことを検討する必要があります。

+0

ありがとう、作品perferct! 「DTOのインターフェースは一般的に悪い考えです」と正確にはどういう意味ですか?この場合、どのように渡し/設計しますか? –

+4

私はIListから抜け出すことができます。つまりListだけです。実際にインターフェイスをサポートしている少数のシリアライザよりも具体的な型を指定しないと、ワイヤ上に動的な型情報を出さなければならず、ペイロードを不必要に膨らませてシリアライザimplにフォーマットを結合する必要があります。 DTO上にインターフェースを持つための良い/有効な理由もありません。 – mythz

関連する問題