Загрузка XML в поток памяти - PullRequest
2 голосов
/ 26 июля 2011

ТАК Я пытаюсь получить простой набор данных из строки strInstallDataSet в набор данных, используя код ниже, когда у меня подключен отладчик, я вижу, что strInstallDataSet имеет данные, byteArray имеет данные, нодаже после чтения msDataset ничего не имеет, длина просто равна 0, я пытался установить позицию до и после чтения, но он все равно просто не получает никаких данных.Есть идеи?

MemoryStream msDataset = new MemoryStream();

if (strInstallDataSet != null)
    {
        // Convert string to byte array.
        byte[] byteArray = Encoding.ASCII.GetBytes(strInstallDataSet);
        msDataset.Read(byteArray, 0, byteArray.Length);

        // Put stream back into dataset object.
        dsInstallData.ReadXml(msDataset);

        msDataset.Close();
        msDataset.Dispose();
    }

Ответы [ 4 ]

3 голосов
/ 26 июля 2011

Вы, вероятно, хотите сделать следующее:

using(StringReader reader = new StringReader(strInstallDataSet)) 
{
    dsInstallData.ReadXml(reader);
}
0 голосов
/ 26 июля 2011

Вы должны использовать метод записи вместо чтения. Я думаю, что вы хотите записать свой байтовый массив в поток памяти.

0 голосов
/ 26 июля 2011

Вы неправильно понимаете, что делает MemoryStream.Read(), он читает в байтовый массив, а не в поток памяти.

Вы хотите MemoryStream.Write(), где у вас есть MemoryStream.Read()

Илиеще лучше ...

MemoryStream xmlMemoryStream = new MemoryStream(byteArray);
0 голосов
/ 26 июля 2011

Вы ничего не записываете в поток, только читаете msDataset.Read ...

Примечание 1: вы используете методы очень низкого уровня - есть классы Reader / Writer, которые будут правильно заботитьсякодировка уже.

Примечание 2: используйте «использование» вместо того, чтобы вручную вызывать Close или Dispose (и не вызывайте 2 из них вместе, так как оба делают одно и то же).

...