static IEnumerable<Type> FindRootTypes(IEnumerable<Type> messageTypesToDeserialize)
{
Type currentRoot = null;
foreach (var type in messageTypesToDeserialize)
{
if (currentRoot == null)
{
currentRoot = type;
yield return currentRoot;
continue;
}
if (!type.IsAssignableFrom(currentRoot))
{
currentRoot = type;
yield return currentRoot;
}
}
}