2011-04-25 30 views
3

所以,我有一個在運行時加載dll的項目,我使用反射和界面來創建dll。如何序列化dll內的對象?

我創建了一個引用爲dll(在運行時)的用戶控件,該用戶控件具有需要序列化的List。它序列化項目的權利,但是當我嘗試加載它時,我無法反序列化它。

現在,我在另一個引用用戶控件作爲項目的項目上測試了這個usercontrol,它運行良好。

這裏是我的代碼:

static public object SerializeLoad(string sFilename) 
    { 
     try 
     { 
      object _object = null; 
      Stream stream = File.Open(sFilename, FileMode.Open); 
      //BinaryFormatter bformatter = new BinaryFormatter(); 
      XmlSerializer bformatter = new XmlSerializer(typeof(ElementTodo), "ToDo"); 

      //_object = (_object.GetType())bformatter.Deserialize(stream); 
      _object = bformatter.Deserialize(stream); 
      stream.Close(); 
      return _object; 
     } 
     catch 
     { 
      return null; 
     } 
    } 

我都嘗試,二進制XML和均通過「有XML文檔中的錯誤(2,2)」。任何想法爲什麼是這樣的?


生成的XML如下:

<?xml version="1.0"?> 
    <ArrayOfElementTodo xmlns:xsi="w3.org/2001/XMLSchema-instance"; xmlns:xsd="w3.org/2001/XMLSchema"; xmlns="ToDo"> 
     <ElementTodo Title="a" content="aa" isDone="false" /> 
     <ElementTodo Title="b" content="bb" isDone="false" /> 
     <ElementTodo Title="c" content="cc" isDone="false" /> 
     <ElementTodo Title="d" content="dd" isDone="false" /> 
    </ArrayOfElementTodo> 
+0

如果您將其序列化爲XML文件,那麼您可以發佈此文件的內容嗎? – 2011-04-25 23:41:38

+0

<?xml version =「1.0」?> 2011-04-25 23:50:53

+0

序列化數據一個*數組*,你試圖反序列化一個元素。 – 2011-04-26 00:16:34

回答

2

的原因是爲了能夠反序列化對象時,對象的類型必須是可用的,因爲.NET是一種靜態類型的環境。 (生活在你的程序中的每一個實例必須有一個包含其成員列表的類型等)

或者,您可以使用C#4動態來反序列化任意XML(1, 2)。

+0

無論如何,我可以將這種類型添加到appdomain,所以它不是孤立的,我可以反序列化它? – 2011-04-26 11:08:51

+0

像你一樣參照項目是否是一個問題? – 2011-04-26 18:40:56