2015-06-07 20 views
1

當它試圖反序列化的代碼我得到與下面的代碼,它無法找到根元素的錯誤反序列化:的Xml序列化和內存流

型「系統的異常。 InvalidOperationException'發生在System.Xml.dll中,但未在用戶代碼中處理
其他信息:XML文檔(0,0)中存在錯誤。
內部異常:{「缺少根元素。」}

這看起來非常簡單足夠的代碼,但谷歌搜索,並在這個問題上的SO搜索並沒有取得任何明確的答案 - 只有類似的問題是仍然是答案沒有幫助......或者我誤解了一些東西。

[TestMethod] 
    public void TestSerialize() 
    { 
     XmlSerializer serializer = new XmlSerializer(testObject.GetType()); 
     MemoryStream memStream = new MemoryStream(); 
     serializer.Serialize(memStream, testObject); 

     XmlSerializer xmlSerializer = new XmlSerializer(testObject.GetType()); 
     TestObject testObj = ((TestObject)xmlSerializer.Deserialize(memStream)); 
     assert(testObject == testObj); 
    } 

public class TestObject 
{ 
    public int IntProp { get; set; } 
    public string StringProp { get; set; } 
} 

涉嫌重複的問題在Root element is missing使用的XMLDocument對象,並有不同的正確答案。

+0

嘗試在序列化後將memorystreem位置設置爲零。或使用新的內存流 – BjarkeCK

+1

*「我收到一個錯誤」* ... **什麼**錯誤?請具體說明。 –

+0

「在System.Xml.dll中發生類型'System.InvalidOperationException'的異常,但未在用戶代碼中處理 其他信息:XML文檔(0,0)中存在錯誤。」 –

回答

5

序列化後,MemoryStream的位置大於0.您需要在讀取之前將其重置。

memStream.Position = 0; 
+0

真棒,感謝您的幫助 - 我不會認爲,流的狀態是問題。 –

1

你可能想重置你的MemoryStream的郵件,因爲在將你的XML序列化到它後,位置將會在最後。

memStream.Position = 0; 
XmlSerializer = new XmlSerializer(testObject.GetType()); 
TestObject testObj = ((TestObject)xmlSerialzer.Deserialize(memStream)); 
+0

謝謝,我只是標記第一個正確回答,但這有助於。 –