Serializer Specification
"Serializer" refers to Graphif Serializer, which has a official implementation
@graphif/serializer
.
This is an object serialization format based on JavaScript.
It has three core concepts: instance, other types, and reference.
Instance
Instance is a JavaScript object with prototype.
It stores the name of prototype in property _
, and other properties are stored as key-value pairs.
{
"_": "ClassName",
"property1": "value1",
"property2": 42,
"property3": true
}
Instance is nestable, meaning that properties can be other instances or other types.
{
"_": "ClassName",
"property1": {
"_": "OtherClass",
"otherProperty": "otherValue"
},
"property2": [1, 2, 3],
"property3": null
}
Other Types
Other values will stored as is, including:
- Primitive types:
string
,number
,boolean
,null
,undefined
- Array:
[value1, value2, ...]
- Plain object (without prototype):
{ key1: value1, key2: value2, ... }
Reference
If there are same objects in the serialized data, implementations may store them as references to save space.
A reference is an object with property $
, which value is a path string to the referred object, and implementations should replace with the referred object.
[
{
"_": "ClassName",
"property": "value",
"other": {
"value": 42
}
},
{ "$": "/0" },
{ "$": "/0/other" }
]
Path String
Path string is a string that starts with /
, followed by a series of keys or indices separated by /
.