nfx-serialization 0.9.3
Cross-platform C++ JSON serialization library with extensible trait capabilities
Loading...
Searching...
No Matches
nfx::serialization::json::SerializationTraits< T > Struct Template Reference

Serialization traits template (forward declaration). More...

#include <nfx/serialization/json/traits/SerializationTraits.h>

Static Public Member Functions

static void fromDocument (const Document &doc, T &obj)
 Convert Document to object (deserialization).

Detailed Description

template<typename T>
struct nfx::serialization::json::SerializationTraits< T >

Serialization traits template (forward declaration).

Unified serialization traits for JSON serialization/deserialization.

Template Parameters
TThe type to serialize/deserialize
See also
SerializationTraits in traits/SerializationTraits.h for full definition
Template Parameters
TThe type to serialize/deserialize

This is the extension point for users to define custom serialization. Users can specialize this template for their types with one or both methods:

  1. serialize() - High-performance streaming (write, no DOM overhead)
  2. fromDocument() - DOM-based deserialization (read) - TWO OPTIONS:
    • Mutable: static void fromDocument(const Document&, T&) - Works with default-constructible types
    • Factory: static T fromDocument(const Document&) - Works with deleted default constructors

The serializer will prefer serialize() when available (detected via SFINAE), falling back to user types with member method fromDocument().

For deserialization, the serializer automatically detects which pattern to use:

  • If factory method exists, it calls SerializationTraits<T>::fromDocument(doc)
  • Otherwise, it creates a default object and calls SerializationTraits<T>::fromDocument(doc, obj)

User types can provide member method with this signature:

  • void fromDocument(const Document&, const Serializer<T>&)

Example: High-performance streaming serialization

template <>
struct SerializationTraits<MyType>
{
static void serialize( const MyType& obj, nfx::json::Builder& builder )
{
builder.writeStartObject();
builder.write( "field1", obj.field1 );
builder.write( "field2", obj.field2 );
builder.writeEndObject();
}
// Option A: Mutable deserialization (for default-constructible types)
static void fromDocument( const Document& doc, MyType& obj )
{
obj.field1 = doc.get<int>("field1").value();
obj.field2 = doc.get<string>("field2").value();
}
};
Serialization traits template (forward declaration).

Example: Factory deserialization (for types with deleted default constructor)

template <>
struct SerializationTraits<NonDefaultConstructibleType>
{
static void serialize( const NonDefaultConstructibleType& obj, nfx::json::Builder& builder )
{
builder.writeStartObject();
builder.write( "requiredField", obj.requiredField );
builder.writeEndObject();
}
// Option B: Factory deserialization (returns new object)
static NonDefaultConstructibleType fromDocument( const Document& doc )
{
auto requiredField = doc.get<int>("requiredField").value();
return NonDefaultConstructibleType{ requiredField }; // Construct with required arguments
}
};

Definition at line 202 of file SerializationTraits.h.

Member Function Documentation

◆ fromDocument()

template<typename T>
void nfx::serialization::json::SerializationTraits< T >::fromDocument ( const Document & doc,
T & obj )
inlinestatic

Convert Document to object (deserialization).

Parameters
docDocument to read from (source)
objObject to populate (destination)

Default implementation calls member method fromDocument()

Definition at line 210 of file SerializationTraits.h.


The documentation for this struct was generated from the following files: