Serialisation – Arma Reforger
Jump to navigation
Jump to search
This page talks about SCR_JsonSaveContext/SCR_JsonLoadContext and SCR_BinSaveContext/SCR_BinLoadContext.
JSON
Serialisation
SCR_JsonSaveContext context = new SCR_JsonSaveContext();
string stringValue = "data";
int integerValue = 123;
context.WriteValue("key1", stringValue);
context.WriteValue("key2", integerValue);
// process saved data (export, send, save...), in this case data are exported as json string
dataString = context.ExportToString();
Deserialisation
SCR_JsonLoadContext context = new SCR_JsonLoadContext();
context.ImportFromString(dataString);
string stringValue;
int integerValue;
// order does not matter for JSON as it uses key names
context.ReadValue("key2", integerValue);
context.ReadValue("key1", stringValue);
Binary
Serialisation
SCR_BinSaveContext context = new SCR_BinSaveContext();
string stringValue = "data";
int integerValue = 123;
context.WriteValue("key1", stringValue);
context.WriteValue("key2", integerValue);
// process saved data (export, send, save...), in this case data are exported as json string
dataString = context.ExportToString();
Deserialisation
SCR_BinLoadContext context = new SCR_BinLoadContext();
context.ImportFromString(dataString);
string stringValue;
int integerValue;
// order matters for Binary serialisation, as Binary ignores names
context.ReadValue("key1", stringValue);
context.ReadValue("key2", integerValue);
Object Serialisation
Simple
The following class set to serialise will serialise all its properties.
class MyClass : Managed
{
protected int m_iVariable = 42;
protected string m_sVariable;
protected float m_fVariable = 33.3;
};
NonSerialized
Adding the NonSerialized() decorator to a field will make the serialisation ignore it.
class MyClass : Managed
{
protected int m_iVariable = 42;
protected string m_sVariable = "Hello there";
[NonSerialized()]
protected float m_fVariable = 33.3;
};
Advanced
The following methods allow to define a custom serialisation per class. This is useful to avoid saving lengthy yet useless information for loading as well as load values in a certain order.
SerializationSave
If an object has the SerializationSave method defined, the SaveContext will use it and not process object's properties automatically at all.
class MyClass : Managed
{
protected int m_iVariable = 42;
protected string m_sVariable = "Hello there";
protected float m_fVariable = 33.3;
bool SerializationSave(SerializationSaveContext context)
{
if (!context.IsValid())
return false;
context.WriteValue("theString", m_sVariable);
context.WriteValue("integer", m_iVariable);
context.WriteValue("floatingpoint", m_fVariable);
return true;
}
};
SerializationLoad
If an object has the SerializationLoad method defined, the SaveContext will use it and not process object's properties automatically at all.
class MyClass : Managed
{
protected int m_iVariable = 42;
protected string m_sVariable = "Hello there";
protected float m_fVariable = 33.3;
bool SerializationLoad(SerializationLoadContext context)
{
if (!context.IsValid())
return false;
context.ReadValue("theString", m_sVariable);
context.ReadValue("integer", m_iVariable);
context.ReadValue("floatingpoint", m_fVariable);
return true;
}
};