我想將字節[]數組轉換爲WP中的XDocument。我有以下代碼將字節[]數組轉換爲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?將字節[]轉換爲XDocument是否正確?或者有任何其他方式轉換?
爲什麼你需要'NullRemover'呢?這意味着別的東西已經被破壞 - 而且只是把數據提交到第一個0字節,你是否真的很高興並不清楚。但是使用'MemoryStream'很好。 –
它給出錯誤「'。」,十六進制值0x00,是一個無效字符,第51行,第12位。這就是爲什麼我使用這個 –
但這只是表明傳輸數據時出現了問題 - 或者是服務器上的XML被破壞了。無論哪種方式,解決方案是確保您得到正確的數據,而不是隨便移除壞字節。你不知道數據有哪些*其他*錯誤。 –