XMLReader/XMLTextReaderクラスで本当に奇妙な問題があります。
私は単純なファイルロードを持っています:
public void First()
{
XmlTextReader reader = new XmlTextReader(@"C:\MyXMLFile.xml");
XmlReader readerToSerialize;
XmlReader readerToLoad;
DuplicateReaders(reader, out readerToSerialize, out readerToLoad);
XmlSerializer serializer = new XmlSerializer(typeof(XMLTree));
XmlFeed = (XMLDescriptor)serializer.Deserialize(readerToSerialize);
xmlDoc.Load(readerToLoad);
}
protected void DuplicateReaders(XmlTextReader xmlReader, out XmlReader cloneOne, out readerToLoad)
{
XmlDocument _XmlDocument = new XmlDocument();
MemoryStream _Stream = new MemoryStream();
_XmlDocument.Load((XmlTextReader)xmlReader);
_XmlDocument.Save(_Stream);
_Stream.Position = 0L;
cloneOne = XmlReader.Create(_Stream);
_Stream.Position = 0L;
cloneTwo = XmlReader.Create(_Stream);
}
問題は、複製された要素の1つだけがファイル全体を正常に読み取り、次の要素(xmlDoc.Load)が常に同じ場所で失敗することです(このxmlファイルの行91、文字37)。xmlDocに直接割り当てる場合(つまり、元の要素を1回だけ複製し、関数から直接割り当てる場合):
public void First()
{
XmlTextReader reader = new XmlTextReader(@"C:\MyXMLFile.xml");
XmlReader readerToSerialize;
DuplicateReaders(reader, out readerToSerialize);
XmlSerializer serializer = new XmlSerializer(typeof(XMLTree));
XmlFeed = (XMLDescriptor)serializer.Deserialize(readerToSerialize);
}
protected void DuplicateReaders(XmlTextReader xmlReader, out XmlReader cloneOne)
{
XmlDocument _XmlDocument = new XmlDocument();
MemoryStream _Stream = new MemoryStream();
_XmlDocument.Load((XmlTextReader)xmlReader);
_XmlDocument.Save(_Stream);
_Stream.Position = 0L;
cloneOne = XmlReader.Create(_Stream);
_Stream.Position = 0L;
this.xmlDoc.Load(_Stream);
}
それでも同じエラー91/37(予期しないEOF)が発生しますが、今回はシリアライザーで発生します。
私の最初の問題はxmlDoc.Load(reader)
、リーダーインスタンスを使用すると破棄され、後でシリアル化できないことでした。MSDNフォーラムで複製機能を見つけましたが、それでもうまくいきません。私が達成したいことは非常に単純です:
1つのリーダーのみを使用して、1つのXmlDocumentと1つのシリアル化されたクラスを取得します。どれくらい難しいですか?