2009-10-25 5 views
2

J'ai une liste personnalisée que je veux intégrer en tant que ressource afin qu'elle puisse être copiée à chaque nouvelle installation. Cependant, ma liste est sérialisée en tant que fichier binaire et lorsque je l'ajoute en tant que ressource, je ne peux pas la copier car C# la traite comme un tableau d'octets. Je dois être en mesure de convertir ce tableau d'octets en ma liste personnalisée lorsque j'extrais le fichier de mes ressources. Quelqu'un peut-il me donner une idée de la façon d'accomplir cette conversion?C# Convertir une matrice d'octets en liste générique

Merci!

+0

Quand vous dites que vous avez une "liste", que voulez-vous dire? –

Répondre

6

De quelle manière l'avez-vous sérialisé? Normalement, vous inverseriez simplement ce processus. Par exemple:

BinaryFormatter bf = new BinaryFormatter(); 
using(Stream ms = new MemoryStream(bytes)) { 
    List<Foo> myList = (List<Foo>)bf.Deserialize(ms); 
} 

De toute évidence, vous devrez peut-être modifier ceci si vous avez utilisé un sérialiseur différent! Ou si vous pouvez obtenir les données en tant que Stream (plutôt qu'un byte[]) vous pouvez perdre l'étape MemoryStream ...

+0

N'oubliez pas de jeter le 'MemoryStream', bien sûr! – Noldorin

+0

Eh bien, oui. Je suis normalement un pédant à ce sujet, mais pour 'MemoryStream' il ** fait vraiment ** pas de différence. Je vais éditer, juste pour vous ;-p –

+0

Ah je vois. Je prenais la ressource et la sérialisait dans un fichier, puis j'essayais de la ré-sérialiser dans ma liste. Cela a plus de sens. Merci! – Nathan

1

Comment la liste est-elle sérialisée? Vous devez avoir accès à une méthode Deserialize() équivalente dont vous pouvez renvoyer le résultat au type de liste d'origine.

+0

Voici comment je sérialiser la ressource. si (! FiOhaus.Exists) { DirectoryUtil.DoesDataFileExist (OhausScale); en utilisant (Stream St = nouveau FileStream (OhausScale, FileMode.OpenOrCreate)) { BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize (St, Resources.Ohaus_Adventure_Pro); } } – Nathan

+0

Voici comment je désérialise le fichier en liste. à l'aide (flux St = new FileStream (_directory + modelName + ".dat", FileMode.Open)) { if (St.Length> 0) { BinaryFormatter = new formatter BinaryFormatter(); Paramètres = (Liste ) formatter.Deserialize (St); isLoaded = true; } } – Nathan

1

Vous devez désérialiser le tableau d'octets dans une instance de votre liste. La façon de procéder dépend du mécanisme par lequel vous l'avez sérialisé. Si vous avez utilisé un BinaryFormatter pour le sérialiser, par exemple, utilisez le même pour désérialiser.

Questions connexes