如何序列化dll中的对象?

时间:2011-04-25 23:32:37

标签: c# wpf serialization

所以,我有一个在运行时加载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>

1 个答案:

答案 0 :(得分:2)

原因是,为了能够反序列化对象,对象的类型必须是可用的,因为.NET是静态类型的环境。 (存在于程序中的每个实例都必须具有包含其成员列表的类型等。)

或者,您可以使用C#4 dynamic来反序列化任意XML(12)。