2009-10-25 5 views
2

У меня есть собственный список, который я хочу встроить в качестве ресурса, чтобы он мог быть скопирован с каждой новой установкой. Однако мой список сериализуется как двоичный файл, и когда я добавляю его как ресурс, я не могу его просто скопировать, потому что C# рассматривает его как массив байтов. Мне нужно иметь возможность преобразовать этот массив байтов обратно в мой пользовательский список, когда я извлекаю файл из своих ресурсов. Может ли кто-нибудь дать мне представление о том, как выполнить это преобразование?C# Преобразование байт-массива в общий список

Спасибо!

+0

Когда вы говорите, что у вас есть «список», что вы имеете в виду? –

ответ

6

Как вы его сериализовали? Обычно вы просто отменяете этот процесс. Например:

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

Возможно, вам потребуется настроить его, если вы использовали другой сериализатор! Или, если вы можете получить данные как Stream (а не byte[]), вы можете потерять шаг MemoryStream ...

+0

Не забудьте оставить «MemoryStream», конечно! – Noldorin

+0

Ну, да. Я, как правило, педант об этом, но для 'MemoryStream' это ** действительно ** не имеет никакого значения. Я отредактирую, только для вас ;-p –

+0

А я вижу. Я беру ресурс и сериализую его в файл, а затем пытаюсь повторно сериализовать обратно в свой список. Это имеет смысл. Спасибо! – Nathan

1

Как этот сериализованный список? У вас должен быть доступ к эквивалентному методу Deserialize(), результат которого можно вернуть к исходному типу списка.

+0

Вот как я сериализую ресурс. if (! FiOhaus.Exists) { DirectoryUtil.DoesDataFileExist (OhausScale); using (Stream St = новый FileStream (OhausScale, FileMode.OpenOrCreate)) { BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize (St, Resources.Ohaus_Adventure_Pro); } } – Nathan

+0

Вот как я десериализую файл обратно в список. используя (поток St = новый FileStream (_directory + ModelName + ".dat", FileMode.Open)) { , если (St.Length> 0) { BinaryFormatter форматировщик = новый BinaryFormatter(); Настройки = (Список ) formatter.Deserialize (St); isLoaded = true; } } – Nathan

1

Вам необходимо десериализовать массив байтов в экземпляр вашего списка. Способ сделать это зависит от механизма, с помощью которого вы его сериализовали. Если вы использовали серию «BinaryFormatter», например, используйте ее для десериализации.

Смежные вопросы