C# 使用StreamReader读取XElement会留下打开的元素

C# 使用StreamReader读取XElement会留下打开的元素,c#,serialization,stream,xelement,C#,Serialization,Stream,Xelement,我有一个MemoryStream,其中包含XML,我将其写入一个文件,如下所示: var xml = XElement.Load(data.Content); // data.Content is of type `Stream` var contentElement = new XElement("Content", xml); var information = new XElement("TestInformation", new XAttrib

我有一个
MemoryStream
,其中包含XML,我将其写入一个文件,如下所示:

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);
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"));
数据
是一种内部类型-
数据对象
,它包含一个
(称为内容)和一个带有元数据的描述符)

稍后,我尝试按如下方式读取此文件:

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

当我尝试将流作为我需要的内部类型来读取时,我会得到一个
序列化异常
,表示某些元素没有关闭,而且它们确实没有关闭-如果我使用
StreamReader
来读取此流,它不会包含我在
XElement
中看到的所有数据。我做错了什么?

[Serializable]
像这样在班上吗

[Serializable]
public class myClass{
//TODO: Your code here 

}

尝试一下并反馈给我

我没有使用
StreamWriter.Flush()
。此方法导致写入程序的缓冲区写入流。

是否尝试了
streamWriter.Flush()
?是否尝试了
testElement.Save(contentStream)
StreamWriter.Write(object)
并不是真正用来编写XML的,尽管使用它会忽略由
XElement.ToString()
返回的XML的某些部分,这有点奇怪。谢谢链接。我添加了“C#”标记,因为我之前的一些问题经过编辑,可以在标题中添加标记。XmlReaders/XmlSerializer不需要
Serializable
属性。只有
BinaryFormatter
才需要它。XML没有序列化。它是从一个文件中读取的,该信息被发送到反序列化。