Gegevensserialisatie in mobiele ontwikkeling: essentie, formaten en hoe het werkt

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

Serialisatie en deserialisatie zijn fundamentele processen voor het omzetten van objecten naar een formaat voor overdracht of opslag. In mobiele ontwikkeling worden deze mechanismen gebruikt bij elk netwerkverzoek, statusopslag en interprocescommunicatie. Volgens MDN Web Docs, 2024 blijft JSON het populairste formaat voor serialisatie in web en mobiele apps, voorbijgaand aan XML en Protocol Buffers.

Belangrijkste

  • Serialisatie — omzetting van een object in een reeks bytes voor overdracht of opslag
  • Deserialisatie — het omgekeerde proces van het herstellen van een object uit de byteweergave
  • JSON — tekstformaat, leesbaar voor mensen en ondersteund door alle platforms
  • Protocol Buffers — binair formaat van Google met hoge snelheid en compacte grootte
  • XML — uitbreidbare opmaaktaal met ondersteuning voor validatieschema's en naamruimten

Essentie van serialisatie en deserialisatie

Serialisatie is het proces van het omzetten van een applicatieobject naar een formaat dat geschikt is voor verzending via een netwerk of opslag op schijf. Deserialisatie voert de omgekeerde conversie uit, waarbij het object wordt hersteld uit de ontvangen gegevens. In mobiele ontwikkeling wordt serialisatie toegepast bij API-verzoeken, het opslaan van de schermstatus, caching en gegevensoverdracht via Intent of Bundle.

Wanneer is het nodig

Elke interactie tussen applicatiecomponenten of tussen de applicatie en de server vereist serialisatie. REST API verzenden gegevens in JSON of XML, gRPC gebruikt Protocol Buffers en intraprocescommunicatie op Android gebruikt Parcelable. Zonder serialisatie is het onmogelijk om een complex object over de procesgrens te sturen of op te slaan in de database.

kotlin
// Algemeen principe van serialisatie
data class User(
    val id: Int,
    val name: String,
    val email: String
)

// Serialisatie: object -> JSON
fun serializeUser(user: User): String {
    return """{"id":${user.id},"name":"${user.name}","email":"${user.email}"}"""
}

// Deserialisatie: JSON -> object
fun deserializeUser(json: String): User? {
    // JSON parseren naar object
    return Gson().fromJson(json, User::class.java)
}
FormaatGrootteSnelheidLeesbaarheidTypering
JSONgemiddeldhooghoogdynamisch
XMLgrootgemiddeldhoogXSD-schema
Protocol Bufferskleinzeer hooglaagstrikt .proto
FlatBufferskleinmaximaallaagstrikt .fbs

JSON — het belangrijkste formaat voor mobiele ontwikkeling

JSON (JavaScript Object Notation) is een lichtgewicht tekstformaat gebaseerd op de syntaxis van JavaScript-objecten. JSON ondersteunt tekenreeksen, getallen, booleaanse waarden, arrays en geneste objecten, wat de meeste scenario's voor gegevensoverdracht in mobiele applicaties dekt. Het formaat is platformonafhankelijk: elk ecosysteem biedt ingebouwde tools voor het parseren ervan.

Voordelen van JSON ten opzichte van alternatieven

JSON wint vanwege zijn eenvoud en universaliteit. De ontwikkelaar heeft geen schema nodig voor basisgebruik — de structuur wordt dynamisch bepaald tijdens het parseren. De leesbaarheid van het formaat vereenvoudigt debugging en testen: het serverantwoord kan in elke ontwikkeltool worden bekeken. Op beide mobiele platforms wordt JSON native verwerkt zonder dat externe bibliotheken nodig zijn.

swift
// Codable — native JSON-serialisatie in Swift
struct User: Codable {
    let id: Int
    let name: String
    let email: String
}

let jsonString = """{"id":1,"name":"John","email":"john@test.com"}"""
let jsonData = Data(jsonString.utf8)
let decoder = JSONDecoder()
let user = try! decoder.decode(User.self, from: jsonData)

Protocol Buffers van Google

Protocol Buffers (protobuf) is een binair serialisatieformaat ontwikkeld door Google voor hoogwaardige systemen. In tegenstelling tot JSON vereist protobuf voorafgaande definitie van het schema in een .proto-bestand, maar biedt het een aanzienlijk kleinere gegevensomvang en hogere verwerkingssnelheid. Het formaat wordt gebruikt in gRPC, Firebase Firestore en interne services van Google.

Structuur van het .proto-bestand

Het protobuf-schema beschrijft berichten met getypeerde velden, elk met een uniek nummer. De protoc-compiler genereert klassen in de gewenste taal die automatisch serialisatie en deserialisatie uitvoeren. Protobuf ondersteunt schema-evolutie via regels voor het toevoegen en verwijderen van velden zonder verlies van achterwaartse compatibiliteit.

cpp
// Schema definiëren in user.proto
syntax = "proto3";

message User {
  int32 id = 1;
  string name = 2;
  string email = 3;
  repeated string roles = 4;
}

// Gegenereerde code in Kotlin
val user = UserProto.User.newBuilder()
    .setId(1)
    .setName("John")
    .setEmail("john@test.com")
    .build()

val bytes: ByteArray = user.toByteArray()

XML en zijn toepassing

XML (eXtensible Markup Language) is een formaat met een strikte structuur, ondersteuning voor naamruimten en validatie via XSD-schema's. XML verliest van JSON in compactheid en parsesnelheid, maar blijft in trek bij Android-ontwikkeling voor layout-bestanden, AndroidManifest, bronnen en Gradle-configuraties. Op iOS wordt XML gebruikt in plist-bestanden en sommige oudere services.

XML parsen op Android

Android biedt drie methoden om XML te parsen: DOM (het hele document in het geheugen laden), SAX (event-georiënteerd stream-parsen) en XmlPullParser (hybride aanpak). XmlPullParser is de aanbevolen optie voor mobiele apparaten, omdat het efficiënt werkt met beperkt geheugen en het document tijdens het lezen kan verwerken.

kotlin
// XmlPullParser op Android
fun parseUserXml(inputStream: InputStream): User? {
    val parser = Xml.newPullParser()
    parser.setInput(inputStream, Xml.Encoding.UTF_8.name)

    var id: Int? = null
    var name: String? = null
    var email: String? = null

    while (parser.next() != XmlPullParser.END_DOCUMENT) {
        if (parser.eventType == XmlPullParser.START_TAG
            && parser.name == "email") {
            email = parser.nextText()
        }
    }
    return User(id!!, name!!, email!!)
}

Serialisatie op iOS en Android

Elk platform biedt zijn eigen tools voor serialisatie. Op iOS is het belangrijkste mechanisme het Codable-protocol met JSONEncoder en JSONDecoder, en voor Objective-C — NSJSONSerialization. Android gebruikt de bibliotheken Gson, Moshi en kotlinx.serialization. Voor gegevensoverdracht tussen processen gebruikt Android Parcelable en iOS gebruikt NSKeyedArchiver. Kotlin-projecten kiezen steeds vaker voor kotlinx.serialization — een oplossing van JetBrains die multiplatform ondersteunt en niet afhankelijk is van reflectie, waarbij serialisatoren worden gegenereerd tijdens de compilatiefase via een Kotlin-compiler-plugin.

Parcelable vs Serializable op Android

Android ondersteunt twee serialisatiemechanismen voor Intent en Bundle. Serializable is het standaard Java-mechanisme dat reflectie gebruikt, wat leidt tot lage prestaties. Parcelable is een Android-specifiek protocol dat handmatige implementatie van de methoden writeToParcel en createFromParcel vereist, maar tientallen keren sneller werkt dankzij directe manipulatie van bytes.

kotlin
// Parcelable op Android
@Parcelize
data class UserParcel(
    val id: Int,
    val name: String,
    val email: String
) : Parcelable

// Overdracht via Intent
val intent = Intent(this, DetailActivity::class.java)
intent.putExtra("user", userParcel)
startActivity(intent)

Op iOS wordt voor gegevensoverdracht tussen controllers Codable gebruikt met voorafgaande serialisatie naar Data, en voor interprocescommunicatie — NSKeyedArchiver, die objecten omzet in het binaire Property List-formaat. Moderne projecten in SwiftUI geven de voorkeur aan het coderen van gegevens via JSONEncoder voor overdracht tussen applicatiemodules.

Veiligheid bij serialisatie

Onjuiste deserialisatie van niet-vertrouwde gegevens kan leiden tot kwetsbaarheden. Aanvallen via serialisatie maken misbruik van overschreven readObject-methoden in Java of onveilige deserialisatoren van externe bibliotheken. Op Android moet Serializable worden vermeden voor gegevens uit niet-vertrouwde bronnen, in plaats daarvan Parcelable of handmatige validatie van alle velden na deserialisatie gebruiken. Op iOS is JSONDecoder standaard strikt met betrekking tot typen, maar bij het werken met JSONSerialization moet de ontwikkelaar typen controleren via conditionele conversie.

Formaatkeuze voor het project

Bij het kiezen van een serialisatieformaat worden prestatie-eisen, gegevensomvang en compatibiliteit in overweging genomen. Voor REST API en microservice-architectuur blijft JSON de optimale keuze — het wordt ondersteund door alle platforms en talen. Voor systemen met hoge belasting en mobiele applicaties met beperkt verkeer hebben Protocol Buffers de voorkeur, die kleinere omvang en snellere deserialisatie bieden. XML is alleen gerechtvaardigd in configuratiescenario's en bij integratie met legacy-systemen. In moderne projecten wint ook FlatBuffers aan populariteit — een binair formaat zonder deserialisatiefase, gebruikt in game-engines en applicaties met minimale latentie. Elk formaat heeft zijn eigen niche en de juiste keuze heeft directe invloed op de snelheid van de applicatie en de hoeveelheid verbruikt verkeer.

Veelgestelde vragen

Wat is serialisatie in eenvoudige bewoordingen?

Serialisatie is het verpakken van een applicatieobject in een formaat dat via een netwerk kan worden verzonden of in een bestand kan worden opgeslagen. Stel je voor dat je een foto maakt van een object — de foto is serialisatie en het herstellen van het object uit de foto is deserialisatie.

Wat is het verschil tussen JSON en Protocol Buffers?

JSON is een tekstformaat dat leesbaar is voor mensen en geen schema vereist. Protocol Buffers is een binair formaat met een verplicht schema (.proto), aanzienlijk kleinere omvang en hogere snelheid. Protobuf wordt gekozen voor systemen met hoge belasting, JSON voor universele compatibiliteit.

Wanneer wordt XML gebruikt in plaats van JSON?

XML blijft de standaard voor configuratiebestanden (AndroidManifest, layout-bronnen), documenten met complexe nesting en systemen met strikte validatie via XSD. XML wordt ook toegepast in SOAP-protocollen en legacy-systemen waar ondersteuning voor naamruimten vereist is.

Wat is Codable in Swift?

Codable is een Swift-protocol dat Encodable en Decodable combineert voor automatische serialisatie en deserialisatie. De compiler genereert de implementatie van de methoden encode(to:) en init(from:) voor alle eigenschappen van de structuur of klasse.

Wat is sneller: Parcelable of Serializable?

Parcelable werkt aanzienlijk sneller dan Serializable, omdat het geen reflectie gebruikt en velden direct naar de bytestroom schrijft. Op moderne apparaten kan het verschil oplopen tot een 10-voudige versnelling in het voordeel van Parcelable.

Samenvatting

  • Serialisatie — omzetting van een object naar een formaat voor overdracht, deserialisatie — omgekeerd herstel
  • JSON — universeel tekstformaat gebruikt in REST API en mobiele applicaties
  • Protocol Buffers — binair formaat van Google voor hoogwaardige scenario's met een vast schema
  • XML — formaat met validatie via XSD, toegepast in configuraties en legacy-systemen
  • Parcelable (Android) en Codable (iOS) — platformspecifieke serialisatiemechanismen voor gegevensoverdracht tussen componenten
  • Veiligheid van serialisatie is kritiek: niet-vertrouwde gegevens kunnen leiden tot kwetsbaarheden bij deserialisatie

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