问题描述
我有一个 UnmanagedMemoryStream
在下面的代码,我怎样才能从deserilizing它获取的对象。我试图让一个资源
从大会
(rd.xaml):
I have an UnmanagedMemoryStream
in below code, How can I get the object from deserilizing it. I was trying to get a Resource
(rd.xaml) from an Assembly
:
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);
我不能够反序列化
的流
到.NET 对象
(这是内容的资源词典
在上述情况下)。我怎样才能做到这一点。
I'm not able to deserialize
the content of Stream
into a .net Object
(which is a Resource Dictionary
in above case). How can I do this?
PS: 的BinaryFormatter
抛出一个异常,而反序列化
操作。
PS: BinaryFormatter
is throwing an exception while Deserialize
operation.
推荐答案
下面是如何我已经做到了,用优化的代码:
Below is how I've done it, with optimized code:
public ResourceDictionary GetResourceDictionary(string assemblyName)
{
Assembly asm = Assembly.LoadFrom(assemblyName);
Stream stream = asm.GetManifestResourceStream(asm.GetName().Name + ".g.resources");
using (ResourceReader reader = new ResourceReader(stream))
{
foreach (DictionaryEntry entry in reader)
{
var readStream = entry.Value as Stream;
Baml2006Reader bamlReader = new Baml2006Reader(readStream);
var loadedObject = System.Windows.Markup.XamlReader.Load(bamlReader);
if (loadedObject is ResourceDictionary)
{
return loadedObject as ResourceDictionary;
}
}
}
return null;
}
输出:的
OUTPUT:
我想读 ResourceDictionary中
,所以,我可以重复它的资源
至
使用。的
这篇关于从ResourceDictionary中外部程序集[从UnmanagedMemoryStream阅读对象]的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!