Azzera filtri
Azzera filtri

Json enconding and decoding for Matlab classes

13 visualizzazioni (ultimi 30 giorni)
Hello , I'm currently defining a new class and I would like to encrypt (using AES) my object and all the information it contains, for this I used the jsonencode Matlab instruction for creating a character vector that is able to be encrypted, this already worked but when I decrypt the object and try to reconstruct it as my original object using Jsondecode it becomes an structure and not the class type that was defined.
So I would like to know if is there someway (method or instruction) to decode this into my original class type or shall I reconstruct the object using the data contained in the structure?
Thanks in advanced.

Risposta accettata

Lakshay Rose
Lakshay Rose il 14 Giu 2023
Modificato: Lakshay Rose il 14 Giu 2023
Hi Adrián Lascurain,
As per my understanding you are trying to encode an object using “jsonencode” and then decode it using “jsondecode” and are getting the return output as a structure.
“jsonencode” function in MATLAB comes with the limitation that when objects are encoded, they don’t preserve their original structure.
To solve this problem there is a workaround of creating your own function which converts your decoded structure back to the object of your desired class.
You can refer to the below documentation to learn more about usage and limitations of “jsonencode” and “jsondecode” functions in MATLAB –
  1 Commento
Adrián Lascurain
Adrián Lascurain il 14 Giu 2023
Modificato: Adrián Lascurain il 14 Giu 2023
Thank you so much Rose, I'm gonna try creating this function and compare it with another that I already found, this a way to preserve the object original structure (methods and properties) and I will let the solution here in the case that someone want to implement something similar.
Matlab has 2 build in functions (undocumented) that can help with this problem
  • getByteStreamFromArray(object) - This convert all the object into an uint8 row vector (this can be encrypted easily)
  • getArrayFromByteStream(RowVector) - This converts the resulting uint8 row vector into the original object
I've made some tests and it seems to work but the resulting vector is larger than the one you get using jsonencode so in my case it increases time for encrypting the data.

Accedi per commentare.

Più risposte (0)

Prodotti


Release

R2022b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by