2011-07-08 7 views
2

XMLファイルをメモリストリームから逆シリアル化するのに問題があります。私は生成されたMyXmlFileクラスと、MyXmlFile型のオブジェクトに逆直列化したいXMLファイルを含むMemoryStreamを持っています。MemoryStreamのXmlSerializer.Deserializeを使用してXMLファイルをデシリアライズできない

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

xmlファイルを含むMemoryStream msがあります。私は例外を取得MyXmlFileタイプのオブジェクトにそのストリームをデシリアライズしようとした場合、私は私のMemoryStreamが正しいことを確認ししかし

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

「XMLドキュメント内のエラー(0,0)があります」。私のストリームを最初にディスク上のファイルに書き込んで、そのファイルを再度読み込むよりもうまくいきます。

 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")); 

自分で解決策を見つけることができなかったため、質問を投稿することにしました。多分誰かが同じ問題を抱えていて、私を助けてくれるかもしれません。

ありがとうございます。不明な点がある場合はお尋ねください。

+0

へのMemoryStreamの位置を設定する必要がありますMyXmlFile'? –

+0

XMLファイルをメモリストリームにロードする方法を投稿して、 'Seek(0、SeekOrigin.Begin)'のようにストリームを0の位置に戻すことを確認できますか? – Kane

+0

memorystreamそれをシリアライザに渡す前に、それは事実でしょうか?その場合は、あらかじめメモリストリームの位置をリセットしてください。 - 編集:@ケーンはストリーム上でそれを私に打つ。位置事^^ – Smudge202

答えて

7

逆シリアル化を呼び出す前にメモリストリームをインスタンス化した場合(たとえば、最初にXMLをメモリストリームにロードする場合)、間違ったインデックスにある可能性があります。試してみてください

ms.Seek(0, SeekOrigin.Begin) 

ストリームの先頭に戻るには

+0

私はそれを考えずに試してみると馬鹿だと感じていますが、それは全く役に立たないのです。 :/ありがとうございました –

+0

私が認めている以上に私にはそれが起こっています。 – AllenG

0

あなたは `クラスのあなたの定義を追加してくださいすることができ0

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