如何传递查询字符串中复杂类型的列表?

问题描述:

如何传递ServiceStack中的复杂类型列表?例如,我的请求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传递序列化对象?

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

KeyValueDataContractDeserializer:错误转换为:A型的定义应该用 '{',希望系列化型 '基金',得到的字符串开始启动:ASDF

ServiceStack使用解析查询字符串JSV Format这基本上是带有CSV风格的引号的JSON(即只有当你的值有一个转义字符时才需要引号)。

虽然你没有在这里定义的自定义路由,在大多数情况下,您的自定义路线是一样的你的要求DTO在这种情况下是测试没有/资金

因此,假设一个自定义的路线是这样的:

HTTP:

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

您可以通过查询字符串像致电您的服务//本地主机:49490/API /测试基金= {[重点? :Key1,Percent:1},{Key:Key2,Percent:2}]

在旁注中DTO上的接口通常是一个坏主意,您应该考虑避免(至少限制)其在任何时候的使用。

+0

谢谢,作品perferct! “DTO上的接口通常是一个糟糕的主意”是什么意思?在这种情况下,你会如何通过/设计? – 2012-02-27 07:50:02

+4

我会把我从IList中拿出​​来 - 即只有List。如果您不提供具体类型而不是实际支持接口的少数序列化程序,则必须在线路上发出动态类型信息,从而不必要地增加有效负载并将格式与串行器impl耦合。在DTO上有接口也没有好的/有效的理由。 – mythz 2012-02-27 21:13:11