【问题标题】:How to serialize an object inside of a dll?如何序列化dll中的对象?
【发布时间】:2025-12-02 01:00:01
【问题描述】:

所以,我有一个在运行时加载 dll 的项目,我正在使用反射和接口来创建 dll。

我创建了一个引用为 dll 的用户控件(在运行时),它有一个需要序列化的列表。它可以正确序列化项目,但是当我尝试加载它时,我无法反序列化它。

现在,我在另一个将用户控件作为项目引用的项目上测试了这个用户控件,它运行良好。

这是我的代码:

    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 文档 (2, 2) 中存在错误”尝试了二进制和 xml。任何想法为什么会这样?


生成的 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>

【问题讨论】:

  • 如果你把它序列化成一个XML文件,那么你能把这个文件的内容贴出来吗?
  • w3.org/2001/XMLSchema-instance" xmlns:xsd="w3.org/2001/XMLSchema" xmlns="ToDo">
  • 序列化数据是一个数组,你正试图反序列化一个元素。
  • 即使我做一个数组,通过异常...
  • 只是好奇——你试过二进制序列化吗?从长远来看,这可能无法满足您的需求,但它可能会排除一些 XML 序列化的可能性......

标签: c# wpf serialization


【解决方案1】:

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

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

【讨论】:

  • 无论如何我可以将这种类型添加到 appdomain 中,这样它就不会被隔离并且我可以反序列化它?
  • 像你那样只引用项目有问题吗?