¿Obtener valor de una propiedad personalizada decorada con atributos?

He escrito un atributo personalizado que uso en ciertos miembros de una clase:

public class Dummy
{
    [MyAttribute]
    public string Foo { get; set; }

    [MyAttribute]
    public int Bar { get; set; }
}

Puedo obtener los atributos personalizados del tipo y encontrar mi atributo específico. Lo que no puedo entender cómo hacer es obtener los valores de las propiedades asignadas. Cuando tomo una instancia de Dummy y la paso (como un objeto) a mi método, ¿cómo puedo tomar el objeto PropertyInfo que obtengo de .GetProperties () y obtener los valores asignados a .Foo y .Bar?

EDITAR:

Mi problema es que no puedo entender cómo llamar correctamente a GetValue.

void TestMethod (object o)
{
    Type t = o.GetType();

    var props = t.GetProperties();
    foreach (var prop in props)
    {
        var propattr = prop.GetCustomAttributes(false);

        object attr = (from row in propattr where row.GetType() == typeof(MyAttribute) select row).First();
        if (attr == null)
            continue;

        MyAttribute myattr = (MyAttribute)attr;

        var value = prop.GetValue(prop, null);
    }
}

Sin embargo, cuando hago esto, la llamada prop.GetValue me da una TargetException - Object no coincide con el tipo de destino. ¿Cómo estructuro esta llamada para obtener este valor?

Respuestas a la pregunta(2)

Su respuesta a la pregunta