How to create persistent variable data inside of an object that streams in and out

Problem: I’m trying to at the moment create a treasure chest object, and I would like to store its open and or closed values, so that if it streams in and out (when you change levels), the chest will remain either opened or closed.

thoughts: I figure this is done using either the gamestate or gameinstance class but i’m not sure which. I’ve really only used gameinstance at this point, so I’d assume that is the one to use, but I still don’t fully understand their differences.I know that that i can’t get a variable that is stored inside of the level blueprint, and call that anywhere, so i figure I would have to at level load, store all of the level’s chests into an array, and on unload somehow call to the particular chests that have been opened, and store their opened values. Then on reload I would have to get the array of chests and used the stored array of data to set the chests to either open or closed again.

Question: I know games do this; so I was wondering how it is gone about, and I’m hoping someone a whole lot smarter than me can give me an answer or at least the correct direction to go in. How would you maintain if a chest was open or closed through in and out streams, besides storing them in the persistent level, as to not bogg down the system?