使用StreamReader读取XElement会留下开放的元素
本文关键字:元素 StreamReader 读取 XElement 使用 | 更新日期: 2023-09-27 17:50:22
我有一个包含XML的MemoryStream
,我将其写入如下文件:
var xml = XElement.Load(data.Content); // data.Content is of type `Stream`
var contentElement = new XElement("Content", xml);
var information = new XElement("TestInformation",
new XAttribute("Name", data.Descriptor.Name),
new XAttribute("Description", data.Descriptor.Description),
new XAttribute("Owner", data.Descriptor.Owner),
contentElement);
(data
是一个内部类型- DataObject
-包含一个Stream
(称为内容)和一个带有元数据的描述符)。
之后,我尝试从这个文件中读取如下内容:
var returnValue = new DataObject();
var xElement = XElement.Load(fullPath);//the file path
returnValue.Descriptor = new Descriptor
{
Name = xElement.Attribute("Name").Value,
Description = xElement.Attribute("Description").Value,
Owner = xElement.Attribute("Owner").Value
};
returnValue.Content = GetContent(xElement.Element("Content"));
GetContent方法:
private Stream GetContent(XElement element)
{
var testElement = element.Elements().First();
var contentStream = new MemoryStream();
var streamWriter = new StreamWriter(contentStream);
streamWriter.Write(testElement);
contentStream.Position = 0;
return contentStream;
}
当我试图读取流作为我需要的内部类型时,我得到一个SerializationException
,说一些元素没有关闭,它们真的没有-如果我使用StreamReader
来读取这个流,它不包含我在XElement
中看到的所有数据。我哪里做错了?
我错过了使用StreamWriter.Flush()
。该方法将写入器的缓冲区写入流。
写[Serializable]
上面的类像这样
[Serializable]
public class myClass{
//TODO: Your code here
}
试一试然后反馈给我