String Serialization and Deserialization in C++

Serialization and deserialization are common concepts in programming.

They are used in data storage, network transmission, and inter-process communication.

Serialization: The process of converting a data structure or object into a format that can be stored or transmitted (such as a string or byte stream).

Deserialization: The process of converting serialized data back into the original data structure or object.

#include <iostream>
#include <string>
#include <sstream>
#include <vector>
using namespace std;

// Define a simple data structure
struct Person {
    string name;
    int age;
    vector<string> hobbies;
};

// Serialization function: Convert Person object to string
string serializePerson(const Person& p) {
    stringstream ss;
    // Use "|" as the field separator; other separators can be used based on coding standards or preferences
    ss << p.name << "|" << p.age;
    // Add hobbies list, separated by ","
    for (size_t i = 0; i < p.hobbies.size(); ++i) {
        if (i == 0) {
            ss << "|";
        } else {
            ss << ",";
        }
        ss << p.hobbies[i];
    }
    return ss.str();
}

// Deserialization function: Convert string back to Person object
Person deserializePerson(const string& data) {
    stringstream ss(data);
    string token;
    Person p;
    int part = 0;
    // Use '|' as the separator to parse the string
    while (getline(ss, token, '|')) {
        if (part == 0) {
            p.name = token;
        } else if (part == 1) {
            p.age = stoi(token);
        } else if (part == 2) {
            // Parse hobbies list, using ',' as the separator
            stringstream hobbiesStream(token);
            string hobby;
            while (getline(hobbiesStream, hobby, ',')) {
                p.hobbies.push_back(hobby);
            }
        }
        part++;
    }
    return p;
}

// Print Person information
void printPerson(const Person& p) {
    cout << "Name: " << p.name << endl;
    cout << "Age: " << p.age << endl;
    cout << "Hobbies: ";
    for (const auto& hobby : p.hobbies) {
        cout << hobby << " ";
    }
    cout << endl;
}

int main() {
    // Create and initialize a Person object
    Person original;
    original.name = "Alice";
    original.age = 25;
    original.hobbies = { "reading", "swimming", "coding" };

    cout << "Original Person:" << endl;
    printPerson(original);
    cout << endl;

    // Serialization
    string serialized = serializePerson(original);
    cout << "Serialized string: " << serialized << endl;
    cout << endl;

    // Deserialization
    Person deserialized = deserializePerson(serialized);
    cout << "Deserialized Person:" << endl;
    printPerson(deserialized);

    return 0;
}

Leave a Comment