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

问题描述 投票:0回答:1

我在.Net Core 2工作,我正在使用谷歌驱动器v3 API并获取XML文件。我找回了一个MemoryStream但是无法将MemoryStream读取到XmlDocument。我尝试了几个文件,内存流的大小与文件大小相匹配,所以我相信我正在获取数据。如何将该MemoryStream转换为XmlDocument?或者我可以解析为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);
c# google-drive-sdk asp.net-core-2.0
1个回答
1
投票

对于XmlDocument来说,听起来你回来的可能不是没有一点按摩的有效XML,所以你应该从基于MemoryStream的实现开始,看看你从服务中获得了什么。

要实现这一点,您需要“回放”流。 Streams有一个“当前位置”的概念,就像光标一样,像Download这样的方法传统上将光标加载到流中后将光标留在数据的末尾。有时这没关系,比如当你使用FileStream将数据直接写入文件时,如果你将数据加载到MemoryStream然后想立即读取它,你需要先重置光标用stream.Seek(0, SeekOrigin.Begin)回到流的开头。

© www.soinside.com 2019 - 2024. All rights reserved.