我有一个程序从脚本文件中获取一些代码并编译它。 它工作正常。
问题是:在脚本中我声明了几个类,我想序列化它们。 显然,C#serializer(xml和binary)不喜欢序列化和内存中程序集中定义的反序列化对象。
我更喜欢不留下内存中的程序集,所以我正在寻找另一种序列化方法,但万一,可以在内存中构建程序集并最终将其写入文件中?
答案 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给您的问题的详细信息,我可以帮助您解决问题所在。
此外,我相信自动生成代码通常是一种祝福。我经常需要回到一个类来修复一个或所有复制/粘贴/保存/加载功能,只是因为有人在添加新变量时忘记更新它们。保存/加载代码是锅炉板代码。让计算机编写它。