[/ Copyright (c) 2019 Vinnie Falco (vinnie.falco@gmail.com) 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/cppalliance/json ] [/-----------------------------------------------------------------------------] [section Serializing] Serialization is the process where a JSON document represented in memory by a __value__ is turned into a sequence of characters. The library provides the following free functions and types for serialization: [table Serialization Functions and Types [ [Name] [Description ]] [ [[link json.ref.boost__json__operator_lt__lt_ `operator<<`]] [ Serialize a __value__, __array__, __object__, or __string__ to a [@https://en.cppreference.com/w/cpp/io/basic_ostream `std::ostream`]. ] ][ [__serialize__] [ Return a __std_string__ representing a serialized __value__, __array__, __object__, or __string__. ] ][ [__serializer__] [ A stateful object which may be used to efficiently serialize one or more instances of __value__, __array__, __object__, or __string__. ] ] ] To facilitate debugging and ease of output, library container types may be written to standard output streams using the stream operator: [doc_serializing_1] The __serialize__ function converts a __value__ into a __std_string__: [doc_serializing_2] In situations where serializing a __value__ in its entirety is inefficient or even impossible, __serializer__ can be used to incrementally serialize a __value__ incrementally. This may be done for a variety of reasons, such as to avoid buffering the entire output, or to ensure that a fixed amount of work is performed in each cycle. Instances of __serializer__ maintain an output state using internal dynamically allocated structures, with an interface to retrieve successive buffers of the serialized output into a caller provided buffer. Here is an example, demonstrating how [link json.ref.boost__json__operator_lt__lt_ `operator<<`] may be implemented using a __serializer__: [example_operator_lt__lt_] As with the parser, the serializer may be reused by calling [link json.ref.boost__json__serializer.reset `serializer::reset`]. This sets up the object to serialize a new instance and retains previously allocated memory. This can result in performance improvements when multiple variables are serialized. [endsect]