Допустим, у меня есть приложение, которое обрабатывает сообщения. В данном случае сообщения - это просто объекты, которые реализуют интерфейс IMessage , который является просто маркером.
В этом приложении, если сообщение не может быть обработано, я хочу зарегистрировать его, прежде всего, в целях аудита и устранения неполадок. Во-вторых, я мог бы использовать его для повторной обработки.
В идеале, я хочу, чтобы сообщение было сериализовано в формат, понятный человеку. Первым кандидатом является XML, хотя есть и другие, такие как JSON. Если бы я должен был сериализовать сообщения как XML, я хотел бы знать, является ли объект сообщения XML-сериализуемым. Один из способов - отразить тип и посмотреть, имеет ли он конструктор без параметров, а другой - потребовать интерфейс IXmlSerializable . Я не слишком доволен ни одним из этих подходов. Существует третий вариант, который заключается в том, чтобы попытаться сериализовать его и перехватить исключения. Это на самом деле не помогает - я хочу каким-то образом оговорить, что IMessage (или производный тип) должен быть xml-сериализуемым.
Маршрут отражения имеет очевидные недостатки, такие как безопасность, производительность и т. Д.
IXmlSerializable Маршрут блокирует мои сообщения в одном формате, когда в будущем я, возможно, захочу изменить формат сериализации на JSON. Другое дело, что даже самые простые объекты теперь должны реализовывать методы ReadXml и WriteXml .
Существует ли маршрут с наименьшим объемом работы, который позволяет мне сериализовать произвольный объект (при условии, что он реализует интерфейс маркера) в XML, но не блокировать будущие сообщения в XML?