How To Exclude Properties From SerializationHolger Weissböck on June 26, 2013
Hello Floxxers, the new SDK (0.7) is out and it brings a feature many of you have been requesting in the forums. As of now you can selectively exclude properties from being serialized to and deserialized from the Flox servers! To pick you up, I’ll quickly summarize that particular problem:
Saving An Entity
Let’s say our game implementation uses entities of type GameSession to represent and store the state of each played game session. It will, for example, hold the information which actions a player has made during his endeavours. For that it uses the property
_actions. The GameSession class may look like this:
Now, since GameSession extends Entity it’s pretty easy to store the current game state to the Flox server. There are several different ways to save a Flox entity and you can read up on them in the documentation. For now, we’ll just save it using the simplistic
That’s it! The GameSession is saved on the server: Your player can now load it from every device he wants and continue that particular game session at any time.
Adding Transient Information
Now, during development you’ll sometimes reach situations where it would be pretty convenient to add properties to the GameSession object, that do not necessarily have to be stored on the Flox servers. For example, if your GameSession points back to some interface element, like this:
Disclaimer: I’m not saying referencing interface elements in your model is beautiful or a good idea: I just picked that property for the sake of this example. I guess, in real life everyone has to decide for himself if he wants to be so reckless as to intermix the data model with actual interface elements. Moving on!
If we save this entity, both properties
_currentScoreSprite will be serialized and stored on the Flox servers. However, it’s quite unlikely that you actually want the information about
_currentScoreSprite stored on the Flox server. For what purpose, really? Furthermore, the next time we load this entity from the Flox server the SDK will not be able to correctly deserialize and recreate the
_currentScoreSprite anyway. Flox can correctly store and load properties of types boolean, integer, number, string, array and objects (used as dictionaries).
Fixing The Serializer
So, we conclude that we need to exclude the
_currentScoreSprite property from the serialization process. We don’t want it on the server. Here’s how we do that with the new Flox SDK:
As you can see, the only thing we did, is add the
[NonSerialized] metadata to the getter of
_currentScoreSprite. Now, when we save that entity, the
_currentScoreSprite property will not be serialized to the server, which not only keeps the amount of garbage data down on your server-side Flox entities, but also reduces the size of serialized entities thus saving transmission time.
In order to get that functionality you need to update your SDK to the latest version (0.7).
- If you’re already using Flox, you should download the latest SDK version. Just replace your current SDK with the new one.
- If you are new to Flox and need some guidance with your setup check out our getting started guide.
That’s it with the latest update to Flox! As usual, please let me know what you think! And perhaps … what you’d like to see next!