HTTP获取返回多种类型

时间:2014-06-16 13:53:50

标签: c# web-services rest asp.net-web-api get

我正在编写一个Web服务,我正在尝试添加对Get请求的响应。困难在于,我有多种类型需要返回。所以最初我有一个基类:

public abstract class AbstractSource
{
    public string name { get; set; }
}

其次是两个衍生物:

public class DatabaseSource : AbstractSource
{
}

public class WebSource : AbstractSource
{

}

这些类最终将拥有更多自己的特定元素。在我的控制器类中,我有以下测试代码:

public class DataSourcesController : ApiController
{
    AbstractSource[] sources = new AbstractSource[] 
    { 
        new WebSource { name="WebPath"},
        new DatabaseSource{name="DB Source"}
    };

    public IEnumerable<AbstractSource> GetAllDataSources()
    {
        return sources;
    }
}

现在当我运行它时,我得到一个serializationException。甚至可以返回这样的多种类型吗?

1 个答案:

答案 0 :(得分:2)

听起来像是在尝试使用XML格式获取数据。

XML序列化程序(例如DataContractSerializer)不知道如何将AbstractSource反序列化为DatabaseSourceWebSource,因此您需要对{您[KnownType(...)]班级的{1}}属性:

AbstractSource