Я бы использовал XML Serializer, просто в более общем смысле, чем вы в настоящее время.
Если сообщение может быть одного из трех типов, вы все равно можете использовать XML-сериализатор для автоматического чтения и десериализации - вам не нужно проверять первый элемент, чтобы различать их. Но для этого требуется объединить XSD в один консолидированный XSD, а затем создать единый консолидированный тип «объединения» на стороне .NET. Вы также можете сделать это в обратном порядке, объединяя сгенерированные типы, а затем извлекая сгенерированный XSD из этого с помощью инструмента xsd.exe.
Предполагаемая «хрупкость» XML-сериализатора, по моему мнению, не является проблемой. XML в целом может быть хрупким, если вы используете технологию привязки данных XML, которая зависит от XSD, как и XML-сериализация. Это не XML-сериализация как таковая, она хрупкая. Это схема, которая может быть хрупкой. Подходы, основанные на схемах, включая сериализацию XML в .NET, могут быть хрупкими, если сами схемы не были разработаны с учетом эволюции. Например, правильное использование xsd: any и xsd: xmlAny, тегов версий сообщений и т. Д. Хорошая новость заключается в том, что есть хорошее руководство по разработке гибкой схемы, которая может развиваться изящно.
Однако, это все может быть не проблема, потому что схема уже существует. В любом случае вы не добавите «хрупкость» в систему с помощью XML Serializer.