Serialisation – Arma Reforger
Jump to navigation
Jump to search
m (Add warning about parameterless constructor and rename context to make the example easy to copy paste) |
(Document top-level JSON struct read and write magic parameter) |
||
Line 4: | Line 4: | ||
== JSON == | == JSON == | ||
{{Feature|informative|Passing an empty string as the name parameter into BaseSerializationSaveContext::WriteValue or BaseSerializationLoadContext::ReadValue allows for a complex top-level struct to be written/read.}} | |||
=== Serialisation === | === Serialisation === |
Revision as of 19:47, 28 December 2022
This page talks about SCR_JsonSaveContext/SCR_JsonLoadContext and SCR_BinSaveContext/SCR_BinLoadContext.
JSON
Serialisation
SCR_JsonSaveContext saveContext = new SCR_JsonSaveContext();
string stringValue = "data";
int integerValue = 123;
saveContext.WriteValue("key1", stringValue);
saveContext.WriteValue("key2", integerValue);
// process saved data (export, send, save...), in this case data are exported as json string
string dataString = saveContext.ExportToString();
Deserialisation
SCR_JsonLoadContext loadContext = new SCR_JsonLoadContext();
loadContext.ImportFromString(dataString);
string stringValue;
int integerValue;
// order does not matter for JSON as it uses key names
loadContext.ReadValue("key2", integerValue);
loadContext.ReadValue("key1", stringValue);
Binary
Serialisation
SCR_BinSaveContext saveContext = new SCR_BinSaveContext();
string stringValue = "data";
int integerValue = 123;
saveContext.WriteValue("key1", stringValue);
saveContext.WriteValue("key2", integerValue);
// process saved data (export, send, save...), in this case data are saved to "file.bin"
saveContext.SaveToFile("file.bin");
Deserialisation
SCR_BinLoadContext loadContext = new SCR_BinLoadContext();
loadContext.LoadFromFile("file.bin");
string stringValue;
int integerValue;
// order matters for Binary serialisation, as Binary ignores names
loadContext.ReadValue("key1", stringValue);
loadContext.ReadValue("key2", integerValue);
Object Serialisation
Simple
The following class set to serialise will serialise all its properties.
NonSerialized
Adding the NonSerialized() decorator to a field will make the serialisation ignore it.
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(BaseSerializationSaveContext 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(BaseSerializationLoadContext context)
{
if (!context.IsValid())
return false;
context.ReadValue("theString", m_sVariable);
context.ReadValue("integer", m_iVariable);
context.ReadValue("floatingpoint", m_fVariable);
return true;
}
};