В основном я создал файл, в котором хранятся сериализованные данные из объекта с именем TravelRecord. У меня нет проблем с сериализацией данных и их хранением в файле с помощью BinaryFormatter(), и у меня нет проблемы с получением первой записи. Я просто хочу получить все записи и отобразить их в ListBox.Deserialize список объектов из файла, который будет отображаться
Вот некоторые из соответствующего кода:
Private reader As New BinaryFormatter()
Private input As FileStream
input = New FileStream(fileName, FileMode.Open, FileAccess.Read)
Dim record = CType(reader.Deserialize(input), TravelRecord)
RequestLst.items.Add(record.toString())
Это работает для возвращения первой записи, но я хочу, чтобы вернуть все из них, так что я могу перебирать их, как следующее:
For Each r As TravelRecord In records
RequestLst.Items.Add(r.ToString())
Next
Я знаю, что, вероятно, я пропустил что-то очень простое, но все, что я пытаюсь, вызывает ошибки RunTime. Также может быть лучший способ справиться с этим.
Вот как выглядят сериализованные данные в файле.
ÿÿÿÿ DTravelRequest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null TravelRequest.TravelRecord ID FirstNameLastNamePurpose StartDateEndDateAmount System.Guid
ýÿÿÿSystem.Guid _a_b_c_d_e_f_g_h_i_j_k “ŸPªO½cùømFÚw Steve Robinson Semianr U¾Ó €æ©PÓ @[email protected] @[email protected] ÿÿÿÿ DTravelRequest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null TravelRequest.TravelRecord ID FirstNameLastNamePurpose StartDateEndDateAmount System.Guid
ýÿÿÿSystem.Guid _a_b_c_d_e_f_g_h_i_j_k æ;o˜ùéAÎÜ^pñÌ jake Kirkbride Stuff l«™ Ó €CøX,Ô À^@ ÿÿÿÿ DTravelRequest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null TravelRequest.TravelRecord ID FirstNameLastNamePurpose StartDateEndDateAmount System.Guid
ýÿÿÿSystem.Guid _a_b_c_d_e_f_g_h_i_j_k FP“¼Î«Gž¥5tuUš steve stevenson vacation @áw%Ó @ˆ!?(Ó @[email protected] ÿÿÿÿ DTravelRequest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null TravelRequest.TravelRecord ID FirstNameLastNamePurpose StartDateEndDateAmount System.Guid
ýÿÿÿSystem.Guid _a_b_c_d_e_f_g_h_i_j_k ‹MÆoh#D–âÑQþ…P Steve Stevenson Program €œN4)Ô €CøX,Ô @[email protected] ÿÿÿÿ DTravelRequest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null TravelRequest.TravelRecord ID FirstNameLastNamePurpose StartDateEndDateAmount System.Guid
ýÿÿÿSystem.Guid _a_b_c_d_e_f_g_h_i_j_k k$ˆµ§FŠm§Íüâ George Govern Stuff €CøX,Ô €ê¡}/Ô `@
Кажется, мой вопрос, как я читаю все эти и превратить их в коллекцию, так что я могу работать с ними.
Вот код для TravelRecord класса:
<Serializable()>
Public Class TravelRecord
'Class fields
Public ID As Guid
Public FirstName As String
Public LastName As String
Public Purpose As String
Public StartDate As Date
Public EndDate As Date
Public Amount As Double
Public Sub New()
MyClass.New(Guid.Empty, String.Empty, String.Empty, String.Empty,
Nothing, Nothing, 0.0)
End Sub
Public Sub New(id As Guid, fName As String, lName As String,
purpose As String, startDate As Date, endDate As Date,
amount As Double)
MyClass.ID = id
MyClass.FirstName = fName
MyClass.LastName = lName
MyClass.Purpose = purpose
MyClass.StartDate = startDate
MyClass.EndDate = endDate
MyClass.Amount = amount
End Sub
Public Overrides Function ToString() As String
Return String.Format("{0,-40}{1,-10}{2,-10}{3,-15}{4,12:d}{5,12:d}{6,12:C}", _
ID, FirstName, LastName, Purpose, StartDate, EndDate, Amount)
End Function
End Class
Из комментариев:
сериализации код:
formatter.Serialize(output, travelRequest)
Где travelRequest является экземпляром TravelRecord.
Возможно, мне нужно будет объяснить это лучше всего. Система предназначена для отправки пользователем TravelRecords. Сериализация устанавливает в Append
новый файл TravelRecord, чтобы он работал как база данных. (Это домашнее задание, которое я обычно использую SQL). Deserialization - это прочитать все записи в файле и отобразить их в сводном ListBox.
Причина Deserialization - это получение только одного TravelRecord, потому что я не знаю, как получить все TravelRecords из файла.
Есть ли способ, чтобы получить количество, сколько элементов в последовательном файле, так что я могу сделать конечный цикл или что-то
Должен ли вывод быть коллекцией? Если так, тогда 'Dim records = CType (reader.Deserialize (input), List (Of TravelRecord))' – OneFineDay
Когда я пытаюсь, я получаю следующее Unhandled Exception: 'Необработанное исключение типа 'System.InvalidCastException' произошло в TravelRequest. exe Дополнительная информация: Невозможно наложить объект типа «TravelRequest.TravelRecord» на тип «System.Collections.Generic.List'1 [TravelRequest.TravelRecord]». ' – JKirkbride
- это TravelRecord коллекция? или он содержит коллекцию? в первом блоке вы относитесь к нему как к одному элементу, а во втором - к списку или коллекции. – Plutonix