J'écris du code C # .NET qui enregistre certaines valeurs au registre. Cela a fonctionné jusqu'à ce que je voulais enregistrer certaines données binaires.
J'ai une liste
mytype code> ressemble à ceci: p>
List<MyType> objectToSaveInRegistry = getList();
RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(MySpecialKey, true);
registryKey.SetValue("MySpecialValueName", objectToSaveInRegistry , RegistryValueKind.Binary);
3 Réponses :
Vous devez probablement sérialiser votre objet en premier avec l'aide du BinaryFormatter et stockez-le dans un Exemple rapide: P> Byte code> Vous pouvez passer à
setValue code>. Je doute que
SetValue code> Serialise l'objet pour vous.
using (var ms = new MemoryStream())
{
var formatter = new BinaryFormatter();
formatter.Serialize(ms, objectToSaveInRegistry);
var data = ms.ToArray();
registryKey.SetValue("MySpecialValueName", data, RegistryValueKind.Binary);
}
@Chriswue essayer ce ms.writebyte (1); Console.writeline (MS.GetBuffer (). Longueur + "" + MS.TOtoarray (). Longueur) Code> Sortie:
256 1 Code>
Je stockerais les valeurs primitives, puis hydratez un POCO lorsque les données sont tirées par opposition à stocker le POCO lui-même. P>
De quoi parles-tu?
@ ILLIDANS4: Il stocke les propriétés individuelles de l'objet sous forme de touches individuelles, puis reconstruisez l'objet de ces clés que par opposition à la conservation de l'objet sérialisé dans une seule touche. L'avantage serait que vous pourriez facilement manipuler des propriétés individuelles (en supposant que vous puissiez bien jusqu'aux types primitifs) - bien que cela puisse également être considéré comme un inconvénient.
@Chriswue et quatre ans plus tard, je ne comprendrais toujours pas le texte de la réponse. Agréable!
Il est préférable de sérialiser / de désexeriser votre objet comme une chaîne. Dans l'exemple suivant, j'utilise la sérialisation XML. La variable "valeur" est l'objet de liste à stocker dans le registre.
// using Microsoft.Win32; // using System.IO; // using System.Text; // using System.Xml.Serialization; string objectToSaveInRegistry; using(var stream=new MemoryStream()) { new XmlSerializer(value.GetType()).Serialize(stream, value); objectToSaveInRegistry=Encoding.UTF8.GetString(stream.ToArray()); } var registryKey=Registry.LocalMachine.OpenSubKey("MySpecialKey", true); registryKey.SetValue("MySpecialValueName", objectToSaveInRegistry, RegistryValueKind.String);
Pourquoi voulez-vous l'enregistrer dans un registre.Lorsque ne pas en faire un fichier XML et l'enregistrer.
@Srinivas, mon objet contient des informations sur la configuration d'une application que je développe. Le registre Windows n'est-il pas destiné à être un endroit où les paramètres d'application peuvent être enregistrés?
Vous essayez de transmettre une liste à une méthode qui s'attend essentiellement à un tableau d'octets. Vous devrez convertir votre liste en ce type de représentation (soit en sérialisant sur une mémoire Morthstream, soit à l'aide d'un sérielizer différent).