2013-12-23 132 views
2

我有兩個從BaseClass繼承的子類。 我正在嘗試使用類型BaseClass的對象上的反射來獲取XmlRootAttribute.ElementName值。所以如果有人傳入一個BaseClass對象,我怎麼能得到值「ChildClass1」或「ChildClass2」?通過反射獲取XmlRootAttribute.ElementName

[Serializable] 
public class BaseClass { 
    // Base properties 
} 

[XmlRoot("ChildClass1")] 
public class ChildClass1 : BaseClass { 
    // Child1 properties 
} 

[XmlRoot("ChildClass2")] 
public class ChildClass2 : BaseClass { 
    // Child2 properties 
} 

回答

2

這裏是我想出瞭解決方案:

public static string GetElementName(BaseClass target) 
{ 
    XmlRootAttribute attribute = target.GetType().GetCustomAttribute<XmlRootAttribute>(); 
    return attribute == null ? null : attribute.ElementName; 
} 

和使用看起來像這樣:

BaseClass baseClass = new BaseClass(); 
BaseClass child1 = new ChildClass1(); 
BaseClass child2 = new ChildClass2(); 

Console.WriteLine(GetElementName(baseClass)); // empty string 
Console.WriteLine(GetElementName(child1)); // ChildClass1 
Console.WriteLine(GetElementName(child2)); // ChildClass2