Save class object as struct
Show older comments
I want to automatically convert class objects to structs before saving them to MAT files.
This webpage seems to explain the task that I expect. However, when I try the following, it trurn out that it is not as expected:
mySuper = MySuper;
save('m.mat', 'mySuper')
load('m.mat')
The saved file contains mySuper variable still as a class object, not a struct.
If I delete the class and load the file afterwards, I get:
Warning: Variable 'mySuper' originally saved as a MySuper cannot be instantiated as an object and will be read in as a uint32.
> In uiimport/runImportdata (line 459)
In uiimport/gatherFilePreviewData (line 438)
In uiimport (line 262)
Class MySuper could be extended by changing the saveobj method to the following:
function S = saveobj(obj)
S = struct(obj);
end
But this doesn't work either.
I'm using MATLAB R2020a.
4 Comments
Steven Lord
on 20 May 2021
I want to automatically convert class objects to structs before saving them to MAT files.
Why? If you do that then when you load the data from the MAT-file it will no longer be an instance of that class and you will be unable to call methods of that class on it.
Behnam
on 20 May 2021
Behnam
on 11 Jun 2021
Michael Jablecki
on 23 Jun 2021
This has been a problem for a while. Object serialization tends to have issues, and I have had parallel problems with Python pickled objects. It is a portability problem. When the class changes, the saved object will no longer be able to be loaded in many cases, making debugging challenging if the process involves saved (serialized) instances separated from the code which generated them. I'd stick with saving as structures and reconstitute as described above rather than ever saving a "native class instance". They are trouble.
Accepted Answer
More Answers (0)
Categories
Find more on Data Type Identification in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!