c# - 如何将程序集对象序列化/反序列化为字节数组

标签 c# serialization deserialization system.reflection

假设在内存中创建一个(可执行的)程序集 编译代码字符串。然后我想序列化这个程序集 将对象转换为字节数组,然后将其存储在数据库中。然后稍后 我想从数据库中检索字节数组并反序列化 将字节数组返回到一个程序集对象中,然后调用该条目 装配点。

起初我只是尝试像处理 .net 中的任何其他简单对象一样执行此序列化,但显然这不适用于程序集对象。程序集对象包含一个名为 GetObjectData 的方法,该方法获取重新实例化程序集所需的序列化数据。因此,对于如何将所有这些拼凑到我的场景中,我有些困惑。

答案只需要说明如何获取程序集对象,将其转换为字节数组,再将其转换回程序集,然后在反序列化程序集上执行入口方法。

最佳答案

使用反射获取程序集字节的肮脏技巧:

  MethodInfo methodGetRawBytes = assembly.GetType().GetMethod("GetRawBytes", BindingFlags.Instance | BindingFlags.NonPublic);
  object o = methodGetRawBytes.Invoke(assembly, null);
  
  byte[] assemblyBytes = (byte[])o;

说明:至少在我的示例中(程序集是从字节数组加载的)程序集实例的类型为“System.Reflection.RuntimeAssembly”。这是一个内部类,因此只能使用反射来访问它。 “RuntimeAssembly”有一个方法“GetRawBytes”,它返回程序集字节。

关于c# - 如何将程序集对象序列化/反序列化为字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7629799/

相关文章:

c# - C# 中 OrderBy Switch 的替代品

c# - 如何按计数对列表列表进行排序?

c# - 重置 ServerCertificateValidationCallback

ruby-on-rails - Ruby on Rails :serialize UTF8 problem

postgis - Geodjango GeoJSON Serializer 几何总是 'null'

language-agnostic - 跨平台和语言(反)序列化

c# - 如何强制对同名的派生类型进行 XML 反序列化?

c# - 在没有数据库上下文的情况下将 LINQ 表达式转换为 SQL 文本

kotlin - Kotlin 中子类型的 GSON 反序列化

java - 使用Gson将JSON反序列化为java记录