Montando uma string XML com atributos de uma classe via Reflection

Caso queiram montar um XML com os atributos de uma classe via reflection, sem usar atributos de serialização:

public static string GetXML(object Param) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml("<Params></Params>"); Type classe = typeof(ICNInstituicoesEnsino); foreach (PropertyInfo  item in classe.GetProperties()) { XmlNode node = xmlDoc.CreateNode(XmlNodeType.Element, item.Name, ""); object value = Param.GetType().GetProperty(item.Name).GetValue(Param, null); node.InnerText = value==null? "":value.ToString(); xmlDoc.DocumentElement.AppendChild(node); } string xml = xmlDoc.OuterXml; return xml; }

Acessando Fields de uma classe via Reflection

Recentemente me deparei com um problema aonde precisei acessar os valores de Fields de classes instanciadas (objetos) de acordo com parâmetros passados (parâmetros estes que seriam o nome dos Fields). Então desenvolvi o seguinte código para resolver este problema. Nesse método é passado a instância da classe e o nome do Field para se obter o valor na instância. Observe o método InvokeMember que recebe como parâmetro a forma de Bind que está configurada para
System.Reflection.BindingFlags.GetField indicando que é para se obter um field. É simples a alteração de método para execução de métodos de classes por exemplo…

public static object GetFieldValue(object Objeto,string FieldName) {
object valor = null;

Type ClassType = Objeto.GetType();

foreach (System.Reflection.MemberInfo mInfo in
ClassType.GetFields())
{
if (mInfo.Name.ToUpper() == FieldName.ToUpper()) {
valor = ClassType.InvokeMember(mInfo.Name,

System.Reflection.BindingFlags.GetField,
null,
Objeto,
null);
}

}

return valor;
}

T+