【问题标题】:ServiceStack, can an Action return an `IEnumerable<IWhateverInterface>`? [duplicate]ServiceStack,Action 可以返回一个 `IEnumerable<IWhateverInterface>` 吗? [复制]
【发布时间】:2013-05-29 03:48:18
【问题描述】:

编辑:请注意我的问题与编辑显示的问题不同。一般来说,我发送 IEnumerable 或 IDictionary 没有问题,但我在发送它们时遇到问题,包含接口。

我想知道 ServiceStack 是否有序列化或传输接口的 IEnumerables 的问题?返回其他对象(例如 DTO 或字符串)的操作不会导致任何问题,但是当我尝试返回 IEnumerable&lt;IWhateverInterface&gt; 时,客户端会收到一个空的枚举。我在服务中的操作返回它们之前验证了可枚举包含所需的元素,因此我看到的唯一问题是序列化或发送部分。

我确保在所有相关类中引用该接口。

谁能解释一下这个?

谢谢

【问题讨论】:

  • 你为什么首先返回接口?你永远不应该嘲笑你的模型。
  • @mythz,你能详细说明一下吗?如何将所有内容映射到新的响应 DTO 中更可取?该接口是一个 IPluginAttributeView,我将它与 MEF 结合使用。关于如何改进这一点以及为什么它比我目前所做的更好的任何提示?我想学习并且可以公开承认我是新手,我不是网络程序员,因此不处理视图、模型和视图模型。
  • @myrthz,为什么返回 IDictionary 可以正常工作?毕竟它也是一个接口,我觉得发送集合接口是有充分理由的。
  • 对于那些投票结束的人来说,这个问题是不同的,我在发送 IEnumerable 或 IDictionary 等接口时没有问题,而是发送包含 IPluginAttributeView (MEF) 等接口的集合。
  • 您没有提供有关您的问题的任何上下文,因此我们无法验证它是什么,但是在服务层中返回接口是一种不好的做法,客户端/序列化程序不知道要补充什么具体的 impl当您有多个具体的实现或您想要替换行为时,主要使用它和接口,您不应该为模型做这些。我建议返回具体的 POCO 或 use purpose-specific DTOs

标签: c# json serialization servicestack


【解决方案1】:

我会向 ServiceStack 作者确认这一点,但我相信序列化程序使用反射来生成传输值。由于您使用的是界面,因此没有什么可反映的。

【讨论】:

    猜你喜欢
    • 2021-12-15
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 2012-04-28
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多