1

厳密に型指定された DataSet と、xsd.exe で生成された対応するクラスがあります。

XML シリアライゼーション/デシリアライゼーションを使用して、DataSet コンテンツを一致するクラスに渡したいと考えていました。

次のようなものを使用する場合:

MyStronglyTypedDataSet ds = new MyStronglyTypedDataSet();
//... fill the dataset...
ds.WriteXml(@"C:\Temp\somedata.xml");

FileStream fs = new FileStream(@"C:\Temp\somedata.xml", FileMode.Open);
XmlSerializer serial = new XmlSerializer(typeof(MyDataSetMatchingClass));
MyDataSetMatchingClass myObj = (MyDataSetMatchingClass)serial.Deserialize(fs);

すべて正常に動作しますが、一時ファイルを使用したくないので、次のことを試しました。

MyStronglyTypedDataSet ds = new MyStronglyTypedDataSet();
//... fill the dataset...
MemoryStream dump = new MemoryStream();
ds.WriteXml(dump);

XmlSerializer serial = new XmlSerializer(typeof(MyDataSetMatchingClass));
MyDataSetMatchingClass myObj = (MyDataSetMatchingClass)serial.Deserialize(dump);

しかし、デシリアライザーは、ルート XML ノードが見つからないと文句を言います。XmlWriterにルートノードを追加するように指示する方法、または欠落しているルートノードまたはその他の解決策を無視するようにデシリアライザーに指示する方法を知っている人はいますか?

4

1 に答える 1

2

ストリームを巻き戻しませんでした。これは非常に一般的な問題です (「IO を台無しにする方法はいくつありますか? 」を参照してください- 「データをメモリにバッファリングするときの落とし穴」を探してください)。設定:

dump.Position = 0;

書き込み (シリアライズ) と読み取り (デシリアライズ) の間。

于 2013-04-12T08:29:11.843 に答える