I'm sure someone has come up with this solution to collections of derived types in derived objects somewhere before, but I couldn't find the solution written up anywhere when I was trying to solve it, so I though I'd write it up for the sake of easy reference...