 <p>The opensource framework <a href="https://github.com/ekonbenefits/impromptu-interface">Impromptu-Interface</a> was designed to do this. It generates a cached lightweight proxy with a static interface and uses the dlr to forward the invocation to the original object.</p> <pre><code>using ImpromptuInterface; public interface ISimpeleClassProps { string Prop1 { get; } long Prop2 { get; } Guid Prop3 { get; } } </code></pre> <p>-</p> <pre><code>dynamic tOriginal= new ExpandoObject(); tOriginal.Prop1 = "Test"; tOriginal.Prop2 = 42L; tOriginal.Prop3 = Guid.NewGuid(); ISimpeleClassProps tActsLike = Impromptu.ActLike(tOriginal); </code></pre>