Serialisation – Arma Reforger
Lou Montana (talk | contribs) m (Fix SCR_Bin*) |
Lou Montana (talk | contribs) m (Some wiki formatting) |
||
(11 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
{{TOC|side}} | {{TOC|side}} | ||
This page | This page explains serialisation using {{Link/Enfusion|armaR|SCR_JsonSaveContext}}/{{Link/Enfusion|armaR|SCR_JsonLoadContext}} and {{Link/Enfusion|armaR|SCR_BinSaveContext}}/{{Link/Enfusion|armaR|SCR_BinLoadContext}}. | ||
== JSON == | == JSON == | ||
{{Feature|informative| | |||
* Passing an empty string as the name parameter into <enforce inline>BaseSerializationSaveContext.WriteValue()</enforce> or <enforce inline>BaseSerializationLoadContext.ReadValue()</enforce> allows for a complex top-level struct to be written/read. | |||
* See also {{Link|Arma Reforger:JsonApiStruct Usage|JsonApiStruct Usage}}. | |||
}} | |||
=== Serialisation === | === Serialisation === | ||
< | <enforce> | ||
SCR_JsonSaveContext | SCR_JsonSaveContext saveContext = new SCR_JsonSaveContext(); | ||
string stringValue = "data"; | string stringValue = "data"; | ||
int integerValue = 123; | 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 | // process saved data (export, send, save...), in this case data are exported as json string | ||
dataString = | string dataString = saveContext.ExportToString(); | ||
</ | </enforce> | ||
=== Deserialisation === | === Deserialisation === | ||
< | <enforce> | ||
SCR_JsonLoadContext | SCR_JsonLoadContext loadContext = new SCR_JsonLoadContext(); | ||
loadContext.ImportFromString(dataString); | |||
string stringValue; | string stringValue; | ||
Line 30: | Line 35: | ||
// order does not matter for JSON as it uses key names | // order does not matter for JSON as it uses key names | ||
loadContext.ReadValue("key2", integerValue); | |||
loadContext.ReadValue("key1", stringValue); | |||
</ | </enforce> | ||
Line 39: | Line 44: | ||
=== Serialisation === | === Serialisation === | ||
< | <enforce> | ||
SCR_BinSaveContext | SCR_BinSaveContext saveContext = new SCR_BinSaveContext(); | ||
string stringValue = "data"; | string stringValue = "data"; | ||
int integerValue = 123; | int integerValue = 123; | ||
saveContext.WriteValue("key1", stringValue); | |||
saveContext.WriteValue("key2", integerValue); | |||
// process saved data (export, send, save...), in this case data are | // process saved data (export, send, save...), in this case data are saved to "file.bin" | ||
saveContext.SaveToFile("file.bin"); | |||
</ | </enforce> | ||
=== Deserialisation === | === Deserialisation === | ||
< | <enforce> | ||
SCR_BinLoadContext | SCR_BinLoadContext loadContext = new SCR_BinLoadContext(); | ||
loadContext.LoadFromFile("file.bin"); | |||
string stringValue; | string stringValue; | ||
Line 62: | Line 67: | ||
// order matters for Binary serialisation, as Binary ignores names | // order matters for Binary serialisation, as Binary ignores names | ||
loadContext.ReadValue("key1", stringValue); | |||
loadContext.ReadValue("key2", integerValue); | |||
</ | </enforce> | ||
Line 72: | Line 77: | ||
The following class set to serialise will serialise all its properties. | The following class set to serialise will serialise all its properties. | ||
{{Feature|warning|Data structures that shall be serialised are not allowed to have parameters in their constructor, otherwise they can not be read back.}} | |||
< | <enforce> | ||
class MyClass : Managed | class MyClass : Managed | ||
{ | { | ||
Line 79: | Line 85: | ||
protected string m_sVariable; | protected string m_sVariable; | ||
protected float m_fVariable = 33.3; | protected float m_fVariable = 33.3; | ||
} | } | ||
</ | </enforce> | ||
==== NonSerialized ==== | ==== NonSerialized ==== | ||
Adding the {{hl|NonSerialized()}} decorator to a field will make the serialisation ignore it. | Adding the {{hl|NonSerialized()}} decorator to a field will make the serialisation ignore it. | ||
< | <enforce> | ||
class MyClass : Managed | class MyClass : Managed | ||
{ | { | ||
Line 92: | Line 98: | ||
[NonSerialized()] | [NonSerialized()] | ||
protected float m_fVariable = 33.3; | protected float m_fVariable = 33.3; | ||
} | } | ||
</ | </enforce> | ||
=== Advanced === | === Advanced === | ||
Line 103: | Line 109: | ||
==== SerializationSave ==== | ==== SerializationSave ==== | ||
If an object has the {{hl|SerializationSave}} method defined, the SaveContext will use it and not process object's properties automatically at all. | If an object has the {{hl|SerializationSave}} method defined, the SaveContext will use it and not process object's properties automatically at all. | ||
< | <enforce> | ||
class MyClass : Managed | class MyClass : Managed | ||
{ | { | ||
Line 110: | Line 116: | ||
protected float m_fVariable = 33.3; | protected float m_fVariable = 33.3; | ||
bool SerializationSave( | bool SerializationSave(BaseSerializationSaveContext context) | ||
{ | { | ||
if (!context.IsValid()) | if (!context.IsValid()) | ||
return false; | return false; | ||
context.WriteValue("theString", m_sVariable); | context.WriteValue("theString", m_sVariable); | ||
context.WriteValue("integer", m_iVariable); | context.WriteValue("integer", m_iVariable); | ||
Line 121: | Line 127: | ||
return true; | return true; | ||
} | } | ||
} | } | ||
</ | </enforce> | ||
==== SerializationLoad ==== | ==== SerializationLoad ==== | ||
If an object has the {{hl|SerializationLoad}} method defined, the SaveContext will use it and not process object's properties automatically at all. | If an object has the {{hl|SerializationLoad}} method defined, the SaveContext will use it and not process object's properties automatically at all. | ||
< | <enforce> | ||
class MyClass : Managed | class MyClass : Managed | ||
{ | { | ||
Line 134: | Line 140: | ||
protected float m_fVariable = 33.3; | protected float m_fVariable = 33.3; | ||
bool SerializationLoad( | bool SerializationLoad(BaseSerializationLoadContext context) | ||
{ | { | ||
if (!context.IsValid()) | if (!context.IsValid()) | ||
Line 145: | Line 151: | ||
return true; | return true; | ||
} | } | ||
} | } | ||
</ | </enforce> | ||
{{GameCategory|armaR|Modding|Tutorials|Scripting}} | {{GameCategory|armaR|Modding|Tutorials|Scripting}} |
Latest revision as of 10:11, 30 September 2024
This page explains serialisation using SCR_JsonSaveContext/SCR_JsonLoadContext and SCR_BinSaveContext/SCR_BinLoadContext.
JSON
Serialisation
Deserialisation
Binary
Serialisation
Deserialisation
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.
SerializationLoad
If an object has the SerializationLoad method defined, the SaveContext will use it and not process object's properties automatically at all.