Dataserialisering inom mobilutveckling: essens, format och hur det fungerar

Författare: IT Sectr Publicerad: 2026-03-15 Lästid: 8 min

Serialisering och deserialisering är grundläggande processer för att omvandla objekt till ett format för överföring eller lagring. Inom mobilutveckling används dessa mekanismer vid varje nätverksbegäran, tillståndslagring och interprocesskommunikation. Enligt MDN Web Docs, 2024 förblir JSON det mest populära formatet för serialisering på webben och i mobilapplikationer, före XML och Protocol Buffers.

Huvudsakligt

  • Serialisering — omvandling av objekt till en sekvens av byte för överföring eller lagring
  • Deserialisering — den omvända processen att återställa objektet från byte-representation
  • JSON — textformat, läsbart för människor och stöds av alla plattformar
  • Protocol Buffers — Googles binära format med hög hastighet och kompakt storlek
  • XML — utökningsbart märkspråk med stöd för valideringsscheman och namnrymder

Essensen av serialisering och deserialisering

Serialisering är processen att omvandla ett applikationsobjekt till ett format som lämpar sig för överföring över nätverk eller lagring på disk. Deserialisering utför den omvända konverteringen och återställer objektet från mottagen data. Inom mobilutveckling tillämpas serialisering vid API-begäranden, lagring av skärmtillstånd, cachning och dataöverföring via Intent eller Bundle.

När behov uppstår

Varje interaktion mellan applikationskomponenter eller mellan applikationen och servern kräver serialisering. REST API överför data i JSON eller XML, gRPC använder Protocol Buffers och intraprocesskommunikation på Android använder Parcelable. Utan serialisering är det omöjligt att skicka ett komplext objekt över processgränsen eller spara det i databasen.

kotlin
// Allmän princip för serialisering
data class User(
    val id: Int,
    val name: String,
    val email: String
)

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

// Deserialisering: JSON -> objekt
fun deserializeUser(json: String): User? {
    // tolkning av JSON till objekt
    return Gson().fromJson(json, User::class.java)
}
FormatStorlekHastighetLäsbarhetTypning
JSONmedelhöghögdynamisk
XMLstormedelhögXSD-schema
Protocol Bufferslitenmycket höglågstrikt .proto
FlatBufferslitenmaximallågstrikt .fbs

JSON — huvudformatet för mobilutveckling

JSON (JavaScript Object Notation) är ett lättviktigt textformat baserat på syntaxen för JavaScript-objekt. JSON stöder strängar, nummer, booleska värden, arrayer och nästlade objekt, vilket täcker de flesta scenarierna för dataöverföring i mobilapplikationer. Formatet är plattformsoberoende: varje ekosystem tillhandahåller inbyggda verktyg för att tolka det.

Fördelar med JSON jämfört med alternativ

JSON vinner på grund av sin enkelhet och universalitet. Utvecklaren behöver inget schema för grundläggande användning — strukturen bestäms dynamiskt under tolkningen. Formatets läsbarhet förenklar felsökning och testning: serverns svar kan visas i vilket utvecklarverktyg som helst. På båda mobilplattformarna bearbetas JSON inbyggt utan att ansluta externa bibliotek.

swift
// Codable — inbyggd JSON-serialisering i 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 från Google

Protocol Buffers (protobuf) är ett binärt serialiseringsformat utvecklat av Google för högpresterande system. Till skillnad från JSON kräver protobuf fördefiniering av schemat i en .proto-fil, men ger betydligt mindre datastorlek och högre bearbetningshastighet. Formatet används i gRPC, Firebase Firestore och Googles interna tjänster.

Struktur för .proto-fil

Protobuf-schemat beskriver meddelanden med typade fält, var och en med ett unikt nummer. Protoc-kompilatorn genererar klasser på önskat språk som automatiskt utför serialisering och deserialisering. Protobuf stöder schemaevolution genom regler för att lägga till och ta bort fält utan förlust av bakåtkompatibilitet.

cpp
// Definition av schema i user.proto
syntax = "proto3";

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

// Genererad kod i Kotlin
val user = UserProto.User.newBuilder()
    .setId(1)
    .setName("John")
    .setEmail("john@test.com")
    .build()

val bytes: ByteArray = user.toByteArray()

XML och dess tillämpning

XML (eXtensible Markup Language) är ett format med strikt struktur, stöd för namnrymder och validering genom XSD-scheman. XML förlorar mot JSON i kompakthet och tolkningshastighet, men är fortfarande efterfrågat inom Android-utveckling för layoutfiler, AndroidManifest, resurser och Gradle-konfigurationer. På iOS används XML i plist-filer och vissa äldre tjänster.

Tolkning av XML på Android

Android erbjuder tre sätt att tolka XML: DOM (laddar hela dokumentet i minnet), SAX (händelsestyrd strömningstolkning) och XmlPullParser (hybridmetod). XmlPullParser är det rekommenderade alternativet för mobila enheter eftersom det arbetar effektivt med begränsat minne och tillåter bearbetning av dokumentet medan det läses.

kotlin
// XmlPullParser på 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!!)
}

Serialisering på iOS och Android

Varje plattform erbjuder sina egna verktyg för serialisering. På iOS är huvudmekanismen protokollet Codable med JSONEncoder och JSONDecoder, och för Objective-C — NSJSONSerialization. Android använder biblioteken Gson, Moshi och kotlinx.serialization. För dataöverföring mellan processer använder Android Parcelable och iOS använder NSKeyedArchiver. Kotlin-projekt väljer allt oftare kotlinx.serialization — en lösning från JetBrains som stöder multiplattform och inte är beroende av reflektion, vilket genererar serialiserare under kompileringsfasen genom ett Kotlin-kompilatorplugin.

Parcelable vs Serializable på Android

Android stöder två serialiseringsmekanismer för Intent och Bundle. Serializable är standard Java-mekanismen som använder reflektion, vilket leder till låg prestanda. Parcelable är ett Android-specifikt protokoll som kräver manuell implementering av metoderna writeToParcel och createFromParcel, men fungerar tiotals gånger snabbare tack vare direkt manipulering av byte.

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

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

På iOS används Codable med föregående serialisering till Data för dataöverföring mellan kontroller, och för interprocesskommunikation — NSKeyedArchiver, som omvandlar objekt till binärt Property List-format. Moderna projekt i SwiftUI föredrar att koda data via JSONEncoder för överföring mellan applikationsmoduler.

Säkerhet vid serialisering

Felaktig deserialisering av otillförlitlig data kan leda till sårbarheter. Attacker via serialisering utnyttjar överskrivna readObject-metoder i Java eller osäkra deserialiserare från tredjepartsbibliotek. På Android bör Serializable undvikas för data från otillförlitliga källor, istället använda Parcelable eller manuell validering av alla fält efter deserialisering. På iOS är JSONDecoder som standard strikt mot typer, men vid arbete med JSONSerialization måste utvecklaren kontrollera typer genom villkorlig konvertering.

Val av format för projektet

Vid val av serialiseringsformat beaktas prestandakrav, datastorlek och kompatibilitet. För REST API och mikrotjänstarkitektur förblir JSON det optimala valet — det stöds av alla plattformar och språk. För högbelastade system och mobilapplikationer med begränsad trafik är Protocol Buffers att föredra, vilka ger mindre storlek och snabbare deserialisering. XML är endast motiverat i konfigurationsscenarier och vid integration med äldre system. I moderna projekt vinner även FlatBuffers popularitet — ett binärt format utan deserialiseringsfas, som används i spelmotorer och applikationer med minimal latens. Varje format har sin nisch och rätt val påverkar direkt applikationens hastighet och mängden förbrukad trafik.

Vanliga frågor

Vad är serialisering i enkla ord?

Serialisering är att packa ett applikationsobjekt i ett format som kan skickas över nätverk eller sparas i en fil. Föreställ dig att du fotograferar ett föremål — fotografiet är serialisering och återställning av föremålet från fotografiet är deserialisering.

Vad skiljer JSON från Protocol Buffers?

JSON är ett textformat läsbart för människor och kräver inget schema. Protocol Buffers är ett binärt format med obligatoriskt schema (.proto), betydligt mindre storlek och högre hastighet. Protobuf väljs för högbelastade system, JSON för universell kompatibilitet.

När används XML istället för JSON?

XML förblir standard för konfigurationsfiler (AndroidManifest, layoutresurser), dokument med komplex nästling och system med strikt validering genom XSD. XML tillämpas även i SOAP-protokoll och äldre system där stöd för namnrymder krävs.

Vad är Codable i Swift?

Codable är ett Swift-protokoll som kombinerar Encodable och Decodable för automatisk serialisering och deserialisering. Kompilatorn genererar implementering av metoderna encode(to:) och init(from:) för alla egenskaper i strukturen eller klassen.

Vilket är snabbast: Parcelable eller Serializable?

Parcelable fungerar betydligt snabbare än Serializable eftersom det inte använder reflektion och direkt skriver fält till byteströmmen. På moderna enheter kan skillnaden uppgå till 10-faldig acceleration till förmån för Parcelable.

Sammanfattning

  • Serialisering — omvandling av objekt till format för överföring, deserialisering — omvänd återställning
  • JSON — universellt textformat som används i REST API och mobilapplikationer
  • Protocol Buffers — Googles binära format för högpresterande scenarier med fast schema
  • XML — format med validering genom XSD, tillämpat i konfigurationer och äldre system
  • Parcelable (Android) och Codable (iOS) — plattformsspecifika serialiseringsmekanismer för dataöverföring mellan komponenter
  • Säkerhet vid serialisering är kritisk: otillförlitlig data kan leda till sårbarheter vid deserialisering

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också