Десериализация XML-файла с использованием XmlSerializer.Deserialize из MemoryStream не работает - PullRequest
2 голосов
/ 08 июля 2011

У меня проблемы с десериализацией моего XML-файла из MemoryStream. У меня есть сгенерированный класс MyXmlFile и MemoryStream, содержащий файл XML, который я хочу десериализовать в объект типа MyXmlFile.

public static class XmlSerializeObject
{
    public static T FromStream<T>(Stream s)
    {
        var serializer = new XmlSerializer(typeof(T));
        return (T) serializer.Deserialize(s);
    }
}

У меня есть MemoryStream ms, которая содержит XML-файл. Если я пытаюсь десериализовать этот поток в объект типа MyXmlFile, я получаю исключение «В XML-документе (0,0) произошла ошибка»

MyXmlFile test = XmlSerializeObject.FromStream<MyXmlFile>(ms);

Однако я убедился, что мой MemoryStream правильный. Если я сначала записываю свой поток в файл на моем диске, а затем снова читаю этот файл, он работает нормально.

        FileStream outStream = File.OpenWrite("D:\\p.xml");
        outStream.Write(((MemoryStream)ms).ToArray(), 0, ((MemoryStream)ms).ToArray().Length);
        outStream.Flush();
        outStream.Close();
        MyXmlFile test= XmlSerializeObject.FromStream<MyXmlFile>(File.OpenRead("D:\\p.xml"));

Мне не удалось найти решение, поэтому я решил опубликовать свой вопрос. Может быть, у кого-то раньше была такая же проблема, и она может мне помочь.

Спасибо заранее. Если что-то неясно, пожалуйста, спросите.

Ответы [ 2 ]

7 голосов
/ 08 июля 2011

Если вы создали экземпляр своего потока памяти до вызова десериализации (скажем, для загрузки XML в поток памяти в первую очередь), возможно, он имеет неправильный индекс.Попробуйте

ms.Seek(0, SeekOrigin.Begin)

Чтобы вернуться к началу потока.

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

Вы должны установить позицию MemoryStream в 0.

((MemoryStream)ms).Position = 0;
MyXmlFile test = XmlSerializeObject.FromStream<MyXmlFile>(ms);
...