如何将 MemoryStream 从 Google Drive Get 请求转换为 XML File C#?

How do I convert the MemoryStream from a Google Drive Get request to an XML File C#?

我在 .Net Core 2 中工作,我正在使用 google 驱动器 v3 API 并获取一个 XML 文件。我取回了 MemoryStream,但无法将 MemoryStream 读取到 XmlDocument。我已经尝试了几个文件,内存流的大小与文件大小相匹配,所以我相信我正在准确地获取数据。如何将该 MemoryStream 转换为 XmlDocument?或者我可以解析为 XML 的字符串?

我尝试将流加载到 xml 文档和文本 reader。文本 reader 返回一个空字符串,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);

对于 XmlDocument,如果不进行一些修改,听起来您返回的内容可能无效 XML,因此您应该从基于 MemoryStream 的实现开始查看您从服务中获得了什么。

要使 正常工作,您需要 "rewind" 流。流有一个"current position"的概念,就像一个游标,而像Download这样的方法传统上在将数据加载到流中后将游标留在数据的末尾。有时这无关紧要,例如当您使用 FileStream 将数据直接写入文件时,但如果您将数据加载到 MemoryStream 然后想立即读取它,您需要先使用 stream.Seek(0, SeekOrigin.Begin).

将光标重置回流的开头