【发布时间】:2016-04-17 10:30:35
【问题描述】:
我在下面的代码中有一个UnmanagedMemoryStream,我如何从反序列化中获取对象。我试图从Assembly 获得Resource (rd.xaml):
string address = @"WpfControlLibrary1.dll";
Assembly skinAssembly = Assembly.LoadFrom(address);
string name = skinAssembly.GetName().Name +".g";
var manager = new ResourceManager(name, skinAssembly);
ResourceSet rs = manager.GetResourceSet(CultureInfo.CurrentCulture, true, true);
UnmanagedMemoryStream stream = (UnmanagedMemoryStream)rs.GetObject("rd.baml", true);
我无法将deserialize 的内容Stream 转换为.net Object(在上述情况下为Resource Dictionary)。我该怎么做?
PS: BinaryFormatter 在Deserialize 操作时抛出异常。
【问题讨论】:
-
什么异常?在哪一行?
-
{"输入流不是有效的二进制格式。起始内容(以字节为单位)为:0C-00-00-00-4D-00-53-00-42-00-41 -00-4D-00-4C-00-00 ..."}
-
在我的代码中添加这些行: BinaryFormatter binForm = new BinaryFormatter();对象 obj = (Object)binForm.Deserialize(stream);
-
您是否使用与反序列化相同的格式化程序对资源字典进行了序列化?看起来你正在尝试做一些奇怪的事情。
rs.GetObject已经根据 MSDN 返回了一个 Object。然后你试图将它分配给一个流?然后反序列化? -
好吧,我没有按原样序列化资源,我所做的只是尝试使用反射从另一个程序集中获取它。并且 getObject 返回 UnmangedMemoryStream ...使用 ccode ...自己查看它不会返回任何其他对象。
标签: c# .net wpf reflection