Añadir dinámicamente las propiedades de C # en tiempo de ejecución

Sé que hay algunas preguntas que abordan esto, pero las respuestas generalmente siguen las líneas de recomendar un Diccionario o Colección de parámetros, que no funciona en mi situación.

Estoy usando una biblioteca que trabaja a través de la reflexión para hacer muchas cosas inteligentes con objetos con propiedades. Esto funciona con clases definidas, así como clases dinámicas. Necesito ir un paso más allá y hacer algo en este sentido:

public static object GetDynamicObject(Dictionary<string,object> properties) {
    var myObject = new object();
    foreach (var property in properties) {
        //This next line obviously doesn't work... 
        myObject.AddProperty(property.Key,property.Value);
    }
    return myObject;
}

public void Main() {
    var properties = new Dictionary<string,object>();
    properties.Add("Property1",aCustomClassInstance);
    properties.Add("Property2","TestString2");

    var myObject = GetDynamicObject(properties);

    //Then use them like this (or rather the plug in uses them through reflection)
    var customClass = myObject.Property1;
    var myString = myObject.Property2;

}

La biblioteca funciona bien con un tipo de variable dinámica, con propiedades asignadas manualmente. Sin embargo, no sé cuántas o qué propiedades se agregarán de antemano.

Respuestas a la pregunta(2)

Su respuesta a la pregunta