2013-12-23 101 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