8

如何在 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 get 传递序列化对象?

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

KeyValueDataContractDeserializer:转换为类型时出错:类型定义应以“{”开头,期望序列化类型“Fund”,字符串以:asdf 开头

4

1 回答 1

10

ServiceStack 使用JSV 格式解析 queryString,这基本上是带有 CSV 样式引号的 JSON(即,仅当您的值具有转义字符时才需要引号)。

虽然您没有在此处定义自定义路由,但在大多数情况下,您的自定义路由与您的请求 DTO 相同,在这种情况下为Test not /funds

因此,假设自定义路线如下所示:

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

您可以通过 QueryString 调用您的服务,例如:

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

附带说明 DTO 上的接口通常是一个坏主意,您应该考虑始终避免(至少限制)它的使用。

于 2012-02-24T17:38:52.753 回答