По сути, я создал файл, в котором храню сериализованные данные из объекта с именем TravelRecord. У меня нет проблем с сериализацией данных и сохранением их в файле с помощью BinaryFormatter(), и у меня нет проблем с получением первой записи. Я просто хочу получить все записи и отобразить их в ListBox.
Вот некоторые из соответствующих кодов:
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Ó @o@ @_@ ÿÿÿÿ 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%Ó @ˆ!?(Ó @_@ ÿÿÿÿ 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,Ô @_@ ÿÿÿÿ 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
новую запись о путешествиях в файл, чтобы она действовала как база данных. (Это домашнее задание, я обычно использую SQL). Десериализация предназначена для чтения всех записей в файле и отображения их в сводном списке ListBox.
Причина, по которой десериализация получает только одну запись TravelRecord, заключается в том, что я не знаю, как получить все записи TravelRecord из файла.
Есть ли способ подсчитать количество элементов в сериализованном файле, чтобы я мог выполнить конечный цикл For или что-то в этом роде?
Dim records = CType(reader.Deserialize(input), List(Of TravelRecord))
- person OneFineDay   schedule 15.11.2015An unhandled exception of type 'System.InvalidCastException' occurred in TravelRequest.exe Additional information: Unable to cast object of type 'TravelRequest.TravelRecord' to type 'System.Collections.Generic.List
1[TravelRequest.TravelRecord]'. ` - person JKirkbride   schedule 15.11.2015record
, будет ли это выглядеть корректно? - person Ňɏssa Pøngjǣrdenlarp   schedule 16.11.2015formatter.Serialize(output, travelRequest)
Код сериализации. Требуется один TravelRequest, который передается из формы. Есть ли лучший способ сериализации данных, чтобы я мог получить к ним доступ как к коллекции позже? - person JKirkbride   schedule 16.11.2015formatter.Serialize(output, travelRequest)
travelrequest - это EXE??? - person Ňɏssa Pøngjǣrdenlarp   schedule 16.11.2015Dim travelRequest As TravelRecord = New TravelRecord(id, FirstNameBox.Text, LastNameBox.Text, PurposeBox.Text, Convert.ToDateTime(StartDateBox.Text), Convert.ToDateTime(EndDateBox.Text), AmountBox.Text)
Это и есть travelRequest. - person JKirkbride   schedule 16.11.2015record
, да, это действительно, и это работает просто отлично. Но он возвращает только первый экземпляр TravelRecord, увиденный в файле. Пользователь через форму ввода может ввести любое количество TravelRecords, а затем захотеть увидеть их все в списке на другом экране. Моя проблема в том, что я хочу показать их все, а не только первый в файле. - person JKirkbride   schedule 16.11.2015Append
новую запись о путешествиях в файл, чтобы она действовала как база данных. (Это домашнее задание, я обычно использую SQL). Десериализация предназначена для чтения всех записей в файле и отображения их в сводном списке ListBox. Причина, по которой десериализация получает только одну запись TravelRecord, заключается в том, что я не знаю, как получить все записи TravelRecord из файла. - person JKirkbride   schedule 16.11.2015List(of TravelRecord)
(как бы вы удалили запись 7 из 9?) - person Ňɏssa Pøngjǣrdenlarp   schedule 16.11.2015For
или что-то в этом роде? - person JKirkbride   schedule 16.11.2015