如何将 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)
.
将光标重置回流的开头
我在 .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)
.