Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# HTTP Get返回多个类型_C#_Web Services_Rest_Asp.net Web Api_Get - Fatal编程技术网

C# HTTP Get返回多个类型

C# HTTP Get返回多个类型,c#,web-services,rest,asp.net-web-api,get,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 Dat

我正在编写一个web服务,并试图向Get请求添加响应。困难在于,我需要返回多个类型。因此,最初我有一个基类:

public abstract class AbstractSource
{
    public string name { get; set; }
}
然后是两个衍生工具:

public class DatabaseSource : AbstractSource
{
}

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

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

    public IEnumerable<AbstractSource> GetAllDataSources()
    {
        return sources;
    }
}
公共类数据源控制器:ApiController
{
AbstractSource[]sources=新的AbstractSource[]
{ 
新的WebSource{name=“WebPath”},
新数据库源{name=“DB Source”}
};
公共IEnumerable GetAllDataSources()
{
返回源;
}
}

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

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

XML序列化程序(例如,
DataContractSerializer
)不知道如何将
AbstractSource
反序列化为
DatabaseSource
WebSource
,因此您需要捕捉
AbstractSource
类上的
[KnownType(…)]
属性:

using System.Runtime.Serialization;

[KnownType(typeof(DatabaseSource))]
[KnownType(typeof(WebSource))]
public abstract class AbstractSource
{
    public string name { get; set; }
}

你能分享你的序列化异常吗?您使用的是什么序列化程序?您希望客户机如何使“find”类型成为要绑定回的正确类型?我原以为是这样的,但后来使用的是[xmlclude],而不是[KnownType]。谢谢
using System.Runtime.Serialization;

[KnownType(typeof(DatabaseSource))]
[KnownType(typeof(WebSource))]
public abstract class AbstractSource
{
    public string name { get; set; }
}