Gegevensserialisatie in mobiele ontwikkeling — wat het is, formaten en werkingsprincipe

Auteur: IT Sectr Gepubliceerd: 2026-03-08 Leestijd: 8 min

Serialisatie is het proces van het omzetten van een object of gegevensstructuur naar een sequentieel formaat dat geschikt is voor verzending via een netwerk of opslag in een bestand. Het omgekeerde proces, deserialisatie, herstelt de gegevens in de oorspronkelijke staat. Volgens MDN Web Docs is serialisatie noodzakelijk voor elke communicatie tussen processen. Serialisatie vormt de basis van REST API, caching en gegevensuitwisseling tussen applicatiecomponenten.

Belangrijkste punten

  • Serialisatie — omzetting van een object in een gegevensstroom voor verzending of opslag
  • JSON — het belangrijkste tekstformaat voor REST API en webcommunicatie
  • Protobuf — binair formaat met maximale prestaties en compactheid
  • XML — strikt formaat met validatie voor Enterprise en Android-ontwikkeling
  • Formaatkeuze hangt af van prestatie- en compatibiliteitseisen

Wat is serialisatie?

Serialisatie is het proces van het omzetten van een object dat zich in het werkgeheugen bevindt naar een lineaire reeks bytes of tekens die via een netwerk kan worden verzonden, in een bestand kan worden opgeslagen of aan een ander proces kan worden doorgegeven. Zonder serialisatie is netwerkcommunicatie, statusopslag en communicatie tussen processen niet mogelijk.

Serialisatie omvat twee tegenovergestelde processen. Het directe proces (serialisatie) verpakt gegevens in een formaat voor verzending. Het omgekeerde proces (deserialisatie) herstelt gegevens terug naar een object. Deserialisatie is kritiek voor beveiliging: onjuiste invoergegevens kunnen leiden tot kwetsbaarheden in de applicatie.

Bij de ontwikkeling van mobiele applicaties wordt serialisatie overal gebruikt: het verzenden van verzoeken naar de server en het verwerken van antwoorden, het opslaan van de applicatiestatus bij schermrotatie, het cachen van gegevens op schijf en het verzenden van gegevens tussen schermen via Intent (Android) of Segue (iOS).

Belangrijkste taken van serialisatie

  • Netwerkcommunicatie — gegevensoverdracht tussen client en server
  • Statusopslag — opslaan en herstellen van applicatiegegevens
  • Caching — opslaan van verzoekresultaten voor offline toegang
  • Cross-platform — gegevensuitwisseling tussen systemen in verschillende talen
  • Logging — serialisatie van objecten voor het schrijven naar logbestanden

Belangrijkste serialisatieformaten

Serialisatieformaten worden onderverdeeld in tekst- en binaire formaten. Tekstformaten (JSON, XML) zijn leesbaar voor mensen en vereisen geen hulpmiddelen voor weergave. Binaire formaten (Protobuf, FlatBuffers, MessagePack) zijn compacter en sneller, maar niet leesbaar zonder deserialisatie. De formatkeuze is een compromis tussen prestaties en debug-gemak.

Naast JSON, XML en Protobuf zijn er gespecialiseerde formaten: FlatBuffers van Google voor games en AR, MessagePack — een compact binair alternatief voor JSON, Avro van Apache voor big data in Kafka, YAML — een configuratieformaat met ondersteuning voor opmerkingen.

Formaat Type Schema Grootte Snelheid
JSON Tekst Optioneel Gemiddeld Gemiddeld
XML Tekst XSD Groot Laag
Protobuf Binair Verplicht Klein Hoog
FlatBuffers Binair Verplicht Klein Maximaal
MessagePack Binair Nee Klein Hoog
Avro Binair JSON Schema Klein Hoog

Serialisatie in mobiele ontwikkeling

Serialisatie op mobiele platforms heeft zijn eigen specificiteit: beperkt verkeer, zwakkere processors en de noodzaak om de status bij schermrotatie op te slaan. Op Android worden Gson, Moshi, Kotlinx Serialization gebruikt. Op iOS — Codable, JSONSerialization, PropertyListEncoder. De juiste keuze van de bibliotheek heeft een kritische invloed op de prestaties van de applicatie.

Kotlinx Serialization — een moderne bibliotheek van JetBrains voor Kotlin Multiplatform Mobile. Het ondersteunt JSON, Protobuf, CBOR en aangepaste formaten. Codegeneratie vindt plaats in de compilatiefase via de Kotlin Serialization-plug-in, wat hoge prestaties garandeert zonder gebruik van reflectie.

Kotlinx Serialization (Kotlin Multiplatform)

De bibliotheek Kotlinx Serialization gebruikt de @Serializable-annotatie voor klassen en een compiler-plug-in voor het genereren van serializers. Dit zorgt voor hoge prestaties en typeveiligheid. Het standaardformaat is JSON, maar andere formaten worden ook ondersteund via extra modules.

kotlin
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
import kotlinx.serialization.encodeToString
import kotlinx.serialization.decodeFromString

@Serializable
data class Project(
    val id: Int,
    val name: String,
    val platforms: List<String>,
    val active: Boolean
)

val json = Json {
    prettyPrint = true
    ignoreUnknownKeys = true
    encodeDefaults = true
}

fun main() {
    val project = Project(1, "MobileApp",
        listOf("Android", "iOS"), true)

    // Serialisatie
    val jsonString = json.encodeToString(project)

    // Deserialisatie
    val restored = json.decodeFromString<Project>(jsonString)
}

Codable op iOS (Swift)

Het protocol Codable — het ingebouwde serialisatiemechanisme in Swift. Het combineert de protocollen Encodable (serialisatie) en Decodable (deserialisatie). JSONEncoder en JSONDecoder verwerken automatisch geneste structuren, arrays, optionele waarden en aangepaste sleutels via CodingKeys.

swift
import Foundation

struct AppConfig: Codable {
    let appName: String
    let version: String
    let features: [String]
    let isProduction: Bool
}

let config = AppConfig(
    appName: "MyApp",
    version: "2.1.0",
    features: ["push", "analytics", "offline"],
    isProduction: true
)

let encoder = JSONEncoder()
encoder.outputFormatting = [.prettyPrinted, .sortedKeys]

guard let data = try? encoder.encode(config) else { return }
let jsonString = String(data: data, encoding: .utf8)

Prestaties en vergelijking van formaten

Prestaties van serialisatieformaten worden beoordeeld op drie metrieken: berichtgrootte, serialisatiesnelheid en deserialisatiesnelheid. Voor mobiele applicaties zijn alle drie kritisch: grootte beïnvloedt het verkeer en de laadtijd, snelheid — de responsiviteit van de interface en de opstarttijd van de applicatie.

Protobuf en FlatBuffers tonen de beste resultaten dankzij de binaire representatie. FlatBuffers onderscheidt zich doordat het geen aparte deserialisatiestap vereist — gegevens worden rechtstreeks uit de binaire buffer gelezen, wat ideaal is voor games en AR-applicaties met minimale latentie-eisen. JSON blijft het populairste formaat voor REST API, ondanks mindere prestaties, vanwege de eenvoud en universaliteit.

Scenario Aanbevolen formaat Reden
REST API JSON Universaliteit, leesbaarheid, ondersteuning
Microservices Protobuf Compactheid, snelheid, gRPC
Games / AR FlatBuffers Zero-copy, minimale latentie
Big Data Avro Compatibiliteit met Kafka en Hadoop
Configuratie YAML Opmerkingen, leesbaarheid
Android layouts XML Platformstandaard

Vergelijkende tests

Praktijktests op een set van 1000 gebruikersobjecten tonen aan: Protobuf creëert berichten van 12 KB (JSON — 85 KB, XML — 120 KB). Serialisatietijd: Protobuf — 2 ms, JSON — 8 ms, XML — 25 ms. Deze cijfers maken binaire formaten de voorkeur voor systemen met hoge belasting en mobiele applicaties met beperkt verkeer.

Voorbeelden van gegevensserialisatie

Voorbeelden tonen de serialisatie van hetzelfde object in verschillende formaten. Dit helpt om de grootte en leesbaarheid visueel te vergelijken. Hetzelfde User-object wordt geserialiseerd in JSON, XML en Protobuf — het is duidelijk te zien dat JSON compacter is dan XML, en Protobuf is het meest compact en tegelijkertijd onleesbaar.

Één object in drie formaten

JSON — minimalistische syntaxis, sleutels tussen aanhalingstekens, waarden van verschillende typen. Bezet 80 tekens. Leesbaarheid hoog, visuele structuur duidelijk. Geschikt voor API's waar ontwikkel- en debugsnelheid belangrijk is.

XML — elk element is verpakt in een openende en sluitende tag. Bezet 150 tekens. Leesbaarheid gemiddeld, structuur strikt. Geschikt voor documentstromen en systemen die validatie via XSD vereisen.

Protobuf — binair, 32 bytes voor deze gegevens. Onleesbaar — vereist deserialisatie voor weergave. Minimale grootte maakt het ideaal voor systemen met hoge belasting en mobiele applicaties.

json
{
  "id": 42,
  "name": "IT Sectr",
  "email": "team@itsectr.com",
  "role": "admin",
  "active": true
}
xml
<user>
    <id>42</id>
    <name>IT Sectr</name>
    <email>team@itsectr.com</email>
    <role>admin</role>
    <active>true</active>
</user>

Beste praktijken voor serialisatie

Beste praktijken helpen veelvoorkomende fouten te voorkomen en de juiste serialisatiestrategie voor het project te kiezen. Het volgen van deze aanbevelingen verbetert de prestaties, beveiliging en onderhoudbaarheid van de code.

Aanbevelingen voor mobiele ontwikkeling

  1. Kies het formaat op basis van het scenario — JSON voor REST API, Protobuf voor gRPC en microservices
  2. Vermijd Java Serializable — traag en onveilig mechanisme, gebruik Kotlinx Serialization of Moshi
  3. Negeer onbekende sleutels — configureer de parser om velden die niet in het model voorkomen over te slaan
  4. Cache gedeserialiseerde gegevens — vermijd het herhaaldelijk parseren van dezelfde gegevens
  5. Valideer invoergegevens — controleer grenzen en typen bij deserialisatie

Beveiliging en serialisatie

Serialisatiebeveiliging — een kritisch belangrijk aspect, vooral bij deserialisatie van gegevens uit onbetrouwbare bronnen. Aanvallen op deserialisatie kunnen leiden tot externe code-uitvoering (RCE), een van de gevaarlijkste kwetsbaarheden in web- en mobiele applicaties. De bekendste gevallen hebben betrekking op Java Serializable en Python pickle.

Protobuf en JSON hebben ingebouwde bescherming tegen dergelijke aanvallen, omdat ze alleen met gegevens werken, niet met willekeurige objecten. Java Serializable kan daarentegen elke klasse herstellen die beschikbaar is in de classpath, wat het gevaarlijk maakt voor het ontvangen van gegevens uit externe bronnen. Op Android wordt aanbevolen Kotlinx Serialization of Moshi te gebruiken in plaats van de standaard Java Serialization.

Aanvullende beveiligingsmaatregelen: stel een limiet in voor de grootte van invoergegevens, valideer het schema vóór deserialisatie, vertrouw niet op Content-Type uit HTTP-headers, gebruik een whitelist voor toegestane klassen. Werk serialisatiebibliotheken regelmatig bij, omdat kwetsbaarheden erin periodiek worden ontdekt en verholpen.

Veelgestelde vragen

Wat is het verschil tussen serialisatie en marshalling?

Serialisatie zet een object om in een reeks bytes, marshalling verzendt gegevens tussen verschillende adresruimten met behoud van typen en structuur. Marshalling omvat serialisatie als onderdeel van het proces, maar kan ook het coderen van verwijzingen en geheugenbeheer omvatten.

Welk serialisatieformaat is het snelst?

FlatBuffers van Google biedt maximale snelheid dankzij zero-copy deserialisatie — gegevens worden rechtstreeks uit de binaire buffer gelezen zonder transformatie. Protobuf staat op de tweede plaats, JSON op de derde. XML is het langzaamste formaat van de gangbare.

Wat kiezen voor Android: Gson, Moshi of Kotlinx Serialization?

Kotlinx Serialization — de beste keuze voor nieuwe projecten in Kotlin: compilatiegeneratie, ondersteuning voor Kotlin Multiplatform, null safety. Moshi — een goede keuze voor projecten in Java, beter presterend dan Gson. Gson — de eenvoudigste bibliotheek om mee te beginnen, maar langzamer en gebruikt reflectie.

Hoe serialiseer je een object met cyclische verwijzingen?

Cyclische verwijzingen leiden tot oneindige recursie bij serialisatie. Oplossingen: gebruik ID-verwijzingen in plaats van directe verwijzingen naar objecten, pas speciale serialisatieadapters toe (bijv. @JsonIgnore in Jackson) of herontwerp het gegevensmodel om cycli te elimineren.

Beïnvloedt serialisatie de beveiliging van de applicatie?

Ja, vooral deserialisatie van gegevens uit onbetrouwbare bronnen. Deserialisatiekwetsbaarheden kunnen leiden tot externe code-uitvoering. Aanbevelingen: deserialiseer geen gegevens uit onbetrouwbare bronnen, gebruik een whitelist van klassen bij deserialisatie en valideer het gegevensschema vóór verwerking.

Samenvatting

  • Serialisatie zet objecten om in een gegevensstroom voor verzending en opslag, deserialisatie herstelt ze
  • JSON — standaard voor REST API, XML — voor documentstromen, Protobuf — voor microservices en hoge belasting
  • Binaire formaten (Protobuf, FlatBuffers) zijn 3-10 keer compacter en sneller dan tekstformaten
  • Op Android wordt Kotlinx Serialization aanbevolen, op iOS — ingebouwde Codable
  • Caching van gedeserialiseerde gegevens vermindert de processorbelasting en versnelt de applicatie
  • Beveiliging van deserialisatie is kritisch — controleer invoergegevens en gebruik een whitelist
  • Formaatkeuze — compromis tussen leesbaarheid, prestaties en compatibiliteit

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook