Если вы можете обработать дополнительную многословность, идущую к сериализатору, который внедряет информацию о типе в результирующий поток, вероятно, лучше всего.
.Net предоставляет SoapFormatter , который является слишком многословным и делает вещи, которые вам, вероятно, не понадобятся, но когда вы десериализуете поток, он просто вернет вам соответствующие объекты (не нужно указывать тип просто приведите корневой объект к типу, который вам известен).
В качестве дополнительного преимущества он будет правильно обрабатывать циклы и общие ссылки в графе объектов.