使用ASP.NET WebApi 4 RC,是否可以将ApiController的返回类型作为基类并实际返回派生类的实例?现在尝试执行此操作会在返回xml时导致内部服务器错误(500)。使用此方法返回json可以正常工作。
public class Base
{
public int ID { get; set; }
}
public class Derived : Base
{
public string Message { get; set; }
}
public class ValuesController : ApiController
{
public IEnumerable<Base> Get()
{
return new Derived[] {
new Derived(){ Message="test"},
new Derived(){ Message="another"}
};
}
}
似乎XML序列化正在抛出错误但我能看到的只是通用500错误。
答案 0 :(得分:1)
是的,你需要使用知识型序列化提示:
[System.Runtime.Serialization.KnownType(typeof(Derived))]
public class Base
{
public int ID { get; set; }
}
答案 1 :(得分:0)
您可能希望以编程方式执行此操作
private static Type[] GetKnownType()
{
var assemblies = AppDomain.CurrentDomain.GetAssemblies();
var knownTypes = new List<Type>();
foreach (var assembly in assemblies)
{
knownTypes.AddRange(assembly.GetTypes().Where(x => x.BaseType == typeof (BaseResponse)).ToArray());
}
return knownTypes.ToArray();
}
请记住你的子类必须有一个默认的构造函数,否则你将得到运行时序列化错误。