将可序列化对象保存到.net中的注册表中?

Dan*_*don 6 .net c# registry serialization

我正在编写一些C#.net代码,可以将一些值保存到注册表中.它工作正常,直到我想保存一些二进制数据.

我有一个像这样的List<MyType>对象MyType:

[Serializable] public class MyType
{
 public string s {get;set;}
 public string t {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

我收到以下代码的错误:

List<MyType> objectToSaveInRegistry = getList();
RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(MySpecialKey, true);
registryKey.SetValue("MySpecialValueName", objectToSaveInRegistry , RegistryValueKind.Binary);
Run Code Online (Sandbox Code Playgroud)

错误是:"值对象的类型与指定的Registry ValueKind不匹配,或者无法正确转换对象."

我能做什么才能将对象保存在注册表中?

Chr*_*Wue 16

您可能需要首先在BinaryFormatter的帮助下序列化您的对象,并将其存储在一个byte数组中,然后您可以传递给该数组SetValue.我怀疑这SetValue会为你序列化对象.

快速举例:

using (var ms = new MemoryStream())
{
    var formatter = new BinaryFormatter();
    formatter.Serialize(ms, objectToSaveInRegistry);
    var data = ms.ToArray();
    registryKey.SetValue("MySpecialValueName", data, RegistryValueKind.Binary);
}
Run Code Online (Sandbox Code Playgroud)

  • @ChrisWue尝试这个`ms.WriteByte(1); Console.WriteLine(ms.GetBuffer().Length +""+ ms.ToArray().Length)`输出:`256 1` (3认同)