Как мне преобразовать поток памяти из Get-запроса Google Диска в XML-файл на C #?

#c# #google-drive-api #asp.net-core-2.0

#c# #google-drive-api #asp.net-core-2.0

Вопрос:

Я работаю в .Net Core 2 и использую API Google Drive v3 и извлекаю XML-файл. Я получаю обратно MemoryStream, но не могу прочитать MemoryStream в XmlDocument. Я попробовал пару файлов, и размер потока памяти соответствует размеру файла, поэтому я уверен, что я действительно получаю данные. Как мне превратить этот MemoryStream в XML-документ? Или строку, которую я могу разобрать в XML?

Я попытался загрузить поток в XML-документ и средство чтения текста. Программа чтения текста возвращается с пустой строкой, а загрузчик xml сообщает, что родительский узел не найден.

 //Fetch the file from Google Drive
var request = _driveService.Files.Get(fileId);
var stream = new System.IO.MemoryStream();
request.Download(stream);

//How I Try and parse to string
StreamReader reader = new StreamReader(stream);
string text = reader.ReadToEnd();

//How I try to load to xml
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(stream);
  

Комментарии:

1. Вы пробовали перематывать MemoryStream перед вызовом ReadToEnd ?

2. Вот и все! Вы должны полностью представить это в качестве ответа, чтобы я мог пометить это как нечто удивительное!

Ответ №1:

XmlDocument Похоже, что то, что вы получаете обратно, может быть недействительным XML без небольшого изменения, поэтому вам следует начать с реализации на MemoryStream основе, чтобы увидеть, что вы получаете от сервиса.

Чтобы это заработало, вам нужно «перемотать» поток. Потоки имеют понятие «текущая позиция», например, курсор, и такие методы, как Download традиционно, оставляют курсор в конце данных после загрузки их в поток. Иногда это не имеет значения, например, когда вы используете a FileStream для записи данных непосредственно в файл, но если вы загружаете данные в a MemoryStream , а затем хотите немедленно их прочитать, вам нужно сначала вернуть курсор обратно в начало потока с stream.Seek(0, SeekOrigin.Begin) помощью .