Я не верю, что у вас будет решение, которое будет соответствовать всем документам XML, но вы можете сделать это.
Я бы создал класс, который реализует IEnumerable<T>
и принимает XmlReader
, который вы хотите передать.
Затем я бы создал тип, который будет использоваться для параметра типа T
в вашей реализации IEnumerable<T>
.
Как только вы это получите, в вашей реализации GetEnumerator
вы вызовете различные Move*
и Read*
методы для XmlReader
, которые позволят вам создать единственный экземпляр T
.
Если у вас есть экземпляр T
в руке, вы должны использовать yield return
для получения предмета. Остальная часть тела GetEnumerator
будет зацикливаться надлежащим образом при потоковой передаче через XmlReader
.
Имея это в виду, вы будете транслировать экземпляры T
по мере их получения, без необходимости загружать весь документ в память.
Вы, конечно, должны проверить, сколько документов вы хотите прочитать за раз.