2012-12-30 66 views
1

我有一個MemoryStream包含XML我寫一個文件,如下所示:使用的StreamReader讀取的XElement葉開放元素

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

你試過'streamWriter.Flush()'? –

+0

你嘗試過'testElement.Save(contentStream);'? 'StreamWriter.Write(object)'實際上不是用來寫XML的,儘管使用this省略了'XElement.ToString()'返回的XML的某些部分有點奇怪。 – dtb

+0

感謝您的鏈接。我添加了'C#'標籤,因爲我之前編寫的一些問題已經被編輯爲標籤添加標籤。 – Noich

回答

0

我錯過使用StreamWriter.Flush()。此方法會將寫入者的緩衝區寫入流中。

-1

[Serializable] 上面的類像這樣

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

} 

嘗試餵我回來

+0

XmlReaders/XmlSerializers不需要'Serializable'屬性。它只需要'BinaryFormatter'。 –

+0

XML未被序列化。它是從文件中讀取的,並且這些信息被髮送到反序列化。 – Noich