HTTP Get返回多个类型

本文关键字:类型 返回 Get HTTP | 更新日期: 2023-09-27 18:08:45

我正在编写一个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。有可能像这样返回多个类型吗?

HTTP Get返回多个类型

听起来你想用XML获取数据。

XML序列化器(例如DataContractSerializer)不知道如何将AbstractSource反序列化为DatabaseSourceWebSource,因此您需要在AbstractSource类上捕捉[KnownType(...)]属性:

using System.Runtime.Serialization;
[KnownType(typeof(DatabaseSource))]
[KnownType(typeof(WebSource))]
public abstract class AbstractSource
{
    public string name { get; set; }
}