我正在尝试将byte []数组转换为WP中的XDocument。我有以下代码
private void btnDownload_Click(object sender, RoutedEventArgs e)
{
svc.DownloadFileCompleted += new EventHandler<DownloadFileCompletedEventArgs>(svc_DownloadFileCompleted);
svc.DownloadFileAsync("XMLFile1.xml");
}
void svc_DownloadFileCompleted(object sender, DownloadFileCompletedEventArgs e)
{
byte[] bytes = e.Result;
//string responseText = Encoding.UTF8.GetString(bytes,0,2048); // ASCII assumed
//XDocument respnseXml = XDocument.Load(responseText);
bytes = NullRemover(bytes);
using (MemoryStream stream = new MemoryStream(bytes))
{
XDocument document = XDocument.Load(stream);
}
}
private byte[] NullRemover(byte[] DataStream)
{
int i;
byte[] temp = new byte[DataStream.Length];
for (i = 0; i < DataStream.Length - 1; i++)
{
if (DataStream[i] == 0x00) break;
temp[i] = DataStream[i];
}
byte[] NullLessDataStream = new byte[i];
for (i = 0; i < NullLessDataStream.Length; i++)
{
NullLessDataStream[i] = temp[i];
}
return NullLessDataStream;
}
我创建了一个下载文件的Web服务。我的代码运行正常。它将byte []转换为XDocument对象。我不确定这种方式是否正确。为什么需要使用 MemoryStream ?将 byte [] 转换为 XDocument 是否正确?或者还有其他转换方式吗?
答案 0 :(得分:0)
考虑直接通过其Uri加载XDocument的可能性。
XDocument.Load("localFile.xml")
或
XDocument.Load("http://example.com/remote.xml")
如果您必须进行异步下载 - 这绝对没有问题,只需使用ThreadPool作为任务来组织专用线程中的下载:
static void Main(string[] args)
{
XDocument document = null;
Task.Factory
.StartNew(() => document = XDocument.Load("https://dl.dropboxusercontent.com/u/1323651/xml_test.txt"))
.ContinueWith(t => Console.WriteLine(document.ToString()))
.Wait();
}