使用C#在内存对象中序列化

时间:2009-01-29 00:24:58

标签: c# serialization assemblies in-memory

我有一个程序从脚本文件中获取一些代码并编译它。 它工作正常。

问题是:在脚本中我声明了几个类,我想序列化它们。 显然,C#serializer(xml和binary)不喜欢序列化和内存中程序集中定义的反序列化对象。

我更喜欢不留下内存中的程序集,所以我正在寻找另一种序列化方法,但万一,可以在内存中构建程序集并最终将其写入文件中?

6 个答案:

答案 0 :(得分:1)

您总是可以使用反射编写自己的ToXml函数,将属性数据写入字符串。然后你的对象会自行反序列化。

只是一个想法。

答案 1 :(得分:0)

如果要动态创建装配,请通过反射查看IL发射。 Here is a good article to get you started.

答案 2 :(得分:0)

所以只是为了澄清一下,如果没有应用[Serializable]属性,你是否会问如何序列化一个类型?

一种解决方案是使用WCF数据协定序列化程序:http://msdn.microsoft.com/en-us/library/ms731923.aspx

显然,这只有在您可以定位.Net 3.0或更高版本时才有效。

或者,您可以实现ISerializationSurrogate。杰弗里里希特在http://msdn.microsoft.com/en-us/magazine/cc188950.aspx有一个很好的介绍。

答案 3 :(得分:0)

我会尽可能避免所有内置序列化,两者都严重破坏。例如,XML序列化不支持字典,而普通序列化/ SOAP不支持泛型。两者都有版本问题。

这很耗时,但创建ToXML和FromXML方法可能是最有效的方法。

答案 4 :(得分:0)

Hava查看at here自定义序列化程序,这是字典XML序列化的示例

答案 5 :(得分:0)

我对XmlSerializer无法序列化动态生成的类型的说法感到有些困惑。 XmlSerializer在构造期间动态生成它自己的序列化代码,因此序列化类型应该没有问题。

您可能需要使用适当的属性来装饰动态类,具体取决于您生成的内容(如派生类),但在您描述的情况下使用XmlSerializer应该没有任何问题。

如果您可以发布XmlSerializer给您的问题的详细信息,我可以帮助您解决问题所在。

此外,我相信自动生成代码通常是一种祝福。我经常需要回到一个类来修复一个或所有复制/粘贴/保存/加载功能,只是因为有人在添加新变量时忘记更新它们。保存/加载代码是锅炉板代码。让计算机编写它。