I propose a solution based in Java class saving/loading, adapted to GLBasic TYPEs. Each type knows how to manage their data and a parent type (like an array or list), calls the loading or saving functions of the elements. Add functions to your TYPEs to save/load a single element to the file, and do the saving/loading loop in the parent list TYPE. Open the file from the container TYPE or array and pass the file channel to each element of the list.
TYPE MyType
a%=5
b%=8
name$="Hans"
// assign properties
function Init: _a%, _b%, _name$
self.a = _a
self.b = _b
self.name$ = _name$
endfunction
// write element to file
// file must be opened for write
function SaveToFile: file%
writeword file, self.a
writeword file, self.b
writeline file, self.name$
endfunction
// load the element from file
// file must be opened for read
function LoadFromFile: file%
readword file, self.a
readword file, self.b
readline file, self.name$
endfunction
ENDTTYPE
// declare list of TYPEs
local mylist[] as MyType
dim mylist[3]
// fill mylist with elements
mylist(0).Init(1, 22, "Fist")
mylist(1).Init(2, 33, "Second")
mylist(2).Init(3, 44, "Third")
// save the list to a file
Openfile(1, "mylist.dat", FALSE)
For elem in list[]
elem.SaveToFile(1)
Next
Closefile 1