2

使用 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 错误。

4

2 回答 2

1

是的,您需要使用 knowntype 序列化提示:

[System.Runtime.Serialization.KnownType(typeof(Derived))]
public class Base
{
    public int ID { get; set; }
}
于 2012-07-13T19:54:53.777 回答
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();
    }

请记住您的子类必须有一个默认构造函数,否则您将收到运行时序列化错误。

于 2014-02-20T13:10:36.660 回答