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

时间:2012-12-30 13:53:41

标签: 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 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中看到的所有数据。我在这里做错了什么?

2 个答案:

答案 0 :(得分:0)

我错过了StreamWriter.Flush()的使用。此方法使写入程序的缓冲区写入流。

答案 1 :(得分:-1)

[Serializable] 上面这样的课程

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

}

尝试并喂我回来