2012-01-01 5 views
7

자손 목록을 serialize하려는 중입니다. 이것은 잘 작동하고 나는 모두 Animal의를 직렬화 할 수Xml 하위 항목 목록을 serialize

class Animal {} 
class Zebra:Animal{} 
class Hippo:Animal{} 

[XmlRootAttribute("Zoo")] 
class Zoo 
{ 
    [XmlArrayItem(typeof(Zebra))] 
    [XmlArrayItem(typeof(Hippo))] 
    public List<Animal> Actions 
    { set; get; } 
} 

이는 잘 작동, 내가 지금 가지고있는 것입니다. 동물의 목록 (인스턴스)을 전달할 수있는 Attribute 클래스를 만드는 것이 가능하고 XmlArrayItem 속성을 생성 할 수 있는지 궁금합니다.

일반적으로 나는 새 것을 만들 때마다 Animal의 자손을 지정하지 않는 방법을 찾고 있습니다. 모든 자손 유형이 무엇이든간에 Animal의 모든 자손을 직렬화하기를 원합니다.

답변

4

당신과 같이 어셈블리에서 파생 된 형식의 목록을 얻을 수 있습니다 :

public IEnumerable<Type> GetAllTypesDerivedFrom(Type type) 
{ 
    var types = Assembly.GetAssembly(type).GetTypes(); 
    return types.Where(t => t.IsSubclassOf(type)); 
} 

이 아마도 당신이 다음 위의 GetAllTypesDerivedFrom 방법에 foreach 루프를 순환하고,이 MSDN 유사한 솔루션으로 들어갈 수 XmlArrayItems 예.

참고 :

return types.Where(type.IsAssignableFrom).Where(t => t != type); 
: 당신이 인터페이스에 대한 모든 파생 된 형식을 취득하려는 경우에는 (두 인터페이스와 클래스로 작업 할) 다음 사용해야합니다
관련 문제