如何传递查询字符串中复杂类型的列表?
问题描述:
如何传递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上的接口通常是一个坏主意,您应该考虑避免(至少限制)其在任何时候的使用。
谢谢,作品perferct! “DTO上的接口通常是一个糟糕的主意”是什么意思?在这种情况下,你会如何通过/设计? – 2012-02-27 07:50:02
我会把我从IList中拿出来 - 即只有List。如果您不提供具体类型而不是实际支持接口的少数序列化程序,则必须在线路上发出动态类型信息,从而不必要地增加有效负载并将格式与串行器impl耦合。在DTO上有接口也没有好的/有效的理由。 – mythz 2012-02-27 21:13:11