////
Copyright (c) 2019 Vinnie Falco (vinnie.falco@gmail.com)
Copyright (c) 2025 Dmitry Arkhipov (grisumbras@yandex.ru)

Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

Official repository: https://github.com/boostorg/json
////

= 序列化

序列化是指将内存中由&lt;<ref_value>&gt;表示的JSON文档转换为字符序列的过程。该库提供以下用于序列化的自由函数和类型：</ref_value>

.Serialization Functions and Types
|===
|Name|Description

| <<ref_operator_lt_lt>>
| Serialize a <<ref_value>>, <<ref_array>>, <<ref_object>>, or <<ref_string>>
到 {std_ostream}

| <<ref_serialize>>
| Return a {std_string} representing a serialized <<ref_value>>, <<ref_array>>,
&lt;<ref_object>&gt; 或 &lt;<ref_string>&gt;。</ref_string></ref_object>

| <<ref_serializer>>
| A stateful object which may be used to efficiently serialize one or more
&lt;<ref_value>&gt;、&lt;<ref_array>&gt;、&lt;<ref_object>&gt; 或 &lt;<ref_string>&gt; 的实例。 |===</ref_string></ref_object></ref_array></ref_value>

为便于调试和输出，库中的容器类型可通过流操作符写入标准输出流：

[source]
----
include::../../../test/doc_serializing.cpp[tag=doc_serializing_1,indent=0]
----

&lt;<ref_serialize>&gt; 函数将一个 &lt;<ref_value>&gt; 转换为 {std_string}:</ref_value></ref_serialize>

[source]
----
include::../../../test/doc_serializing.cpp[tag=doc_serializing_2,indent=0]
----

在完整序列化一个 &lt;<ref_value>&gt; 效率低下甚至不可行的情况下，可使用 &lt;<ref_serializer>&gt; 对其进行逐步序列化。这样做有多种原因，例如避免缓冲整个输出，或确保每个周期执行固定量的工作。&lt;<ref_serializer>&gt; 的实例通过内部动态分配的结构维护输出状态，并提供接口，将序列化输出的连续缓冲区写入调用方提供的缓冲区中。以下示例展示了如何使用 &lt;<ref_serializer>&gt; 来实现 &lt;<ref_operator_lt_lt>&gt;：</ref_operator_lt_lt></ref_serializer></ref_serializer></ref_serializer></ref_value>

[source]
----
include::../../../include/boost/json/impl/serialize.ipp[tag=example_operator_lt_lt,indent=0]
----

与解析器类似，序列化器可通过调用 &lt;<ref_serializer_reset>&gt; 重复使用。这会将对象重置为序列化新实例的状态，并保留先前分配的内存，从而在序列化多个变量时提升性能。</ref_serializer_reset>
