marshal
Этот модуль содержит процедуры для сериализации и десериализации произвольных данных Nim. Формат сериализации использует JSON.
Ограничение: Для объектов их тип не сериализуется. Это означает, что он не будет работать, если объект имеет другой тип во время выполнения, чем тип во время компиляции.
Основное использование
type
A = object of RootObj
B = object of A
f: int
var
a: ref A
b: ref B
new(b)
a = b
echo($$a[]) # produces "{}", not "{f: 0}"
# unmarshal
let c = to[B]("""{"f": 2}""")
assert typeof(c) is B
assert c.f == 2
# marshal
let s = $$c
assert s == """{"f": 2}"""
Примечание: Операции to и $$ доступны во время компиляции!
См. также
Импорты
- streams, typeinfo, json, intsets, tables, unicode
Процедуры
proc load[T](s: Stream; data: var T)
- Загружает
dataиз потокаs. ВызываетIOErrorв случае ошибки.Пример:
import marshal, streams var s = newStringStream("[1, 3, 5]") var a: array[3, int] load(s, a) assert a == [1, 3, 5]Исходный код Редактировать proc store[T](s: Stream; data: T)
- Сохраняет
dataв потокs. ВызываетIOErrorв случае ошибки.Пример:
import marshal, streams var s = newStringStream("") var a = [1, 3, 5] store(s, a) s.setPosition(0) assert s.readAll() == "[1, 3, 5]"Исходный код Редактировать proc `$$`[T](x: T): string
-
Возвращает строковое представление
x(сериализация, маршаллинг).Примечание: для сериализации
xв JSON используйте$(%x)из модуляjson.Пример:
type Foo = object id: int bar: string let x = Foo(id: 1, bar: "baz") ## serialize: let y = $$x assert y == """{"id": 1, "bar": "baz"}"""Исходный код Редактировать proc to[T](data: string): T
- Читает данные и преобразует их в тип
T(десериализация, унмаршаллинг).Пример:
type Foo = object id: int bar: string let y = """{"id": 1, "bar": "baz"}""" assert typeof(y) is string ## deserialize to type 'Foo': let z = y.to[:Foo] assert typeof(z) is Foo assert z.id == 1 assert z.bar == "baz"Исходный код Редактировать
© 2006–2021 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/marshal.html