2012-07-13 3 views
2

ASP.NET WebApi 4 RC를 사용하면 ApiController의 반환 형식을 기본 클래스로 설정하고 실제로 파생 클래스의 인스턴스를 반환 할 수 있습니까? 이 작업을 시도하면 xml을 반환 할 때 내부 서버 오류 (500)가 발생합니다. 이 메서드를 사용하여 json을 반환하면 올바르게 작동합니다.ApiController에서 반환 형식으로 기본 클래스 사용

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 오류 만 보입니다.

[System.Runtime.Serialization.KnownType(typeof(Derived))] 
public class Base 
{ 
    public int ID { get; set; } 
} 

답변

1

예, 당신은 knowntype 직렬화 힌트를 사용할 필요가 런타임 직렬화 오류.

+0

Perfect. 내가 필요한 것. – vtforester

+0

당신은이 질문이 중복 된 (...) 복제본의 복제본이라는 것을 알고 있습니다. –

+0

@FilipW 그래서 어떤 질문이 모두 끝내고 수백 개의 upvotes와 .NET 전문가 응답이 포함되어 있습니다. .. 못 찾겠 어. – felickz

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(); 
    } 

그것을 수행 할 수 있습니다 :

관련 문제