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 回答