解析Web API中的接口

时间:2014-06-25 16:00:52

标签: c# .net json json.net asp.net-web-api2

我有一个带有以下签名的控制器方法

[HttpGet]
[Route("results")]
public List<IResult> GetResults()
{
  return repo.GetResults();
}

毫不奇怪,我得到一个JSON .NET异常,说JSON .NET无法将IResult解析为具体类型。有没有办法为JSON .NET提供具体的类(Result),所以我不必更改方法的单一性?

1 个答案:

答案 0 :(得分:2)

看起来你想要做的不是真正的依赖注入,而是你想要控制数据的序列化方式。使用自定义媒体类型格式化程序(http://www.asp.net/web-api/overview/formats-and-model-binding/media-formatters)完全可以控制这一点,但是您需要先删除默认的json格式化程序(http://www.asp.net/web-api/overview/formats-and-model-binding/json-and-xml-serialization#json_media_type_formatter)。

这一切都可以完成,但它会使事情更加脆弱,可能不是你想要的解决方案。如果客户端需要xml(您也可以替换该格式化程序),它将无法工作。但更重要的是,如果您在容器中注册了两个Interface接口,会发生什么?这提出了另一个问题,为什么你使用接口作为DTO?接口通常定义由消费者实现的方法的集合。我知道属性也可以定义,但我不认为这是接口的预期用途。