سریال‌سازی داده در توسعه موبایل: ماهیت، فرمت‌ها و نحوه کار

نویسنده: IT Sectr منتشر شده: 2026-03-15 زمان مطالعه: 8 دقیقه

سریال‌سازی و دیسریال‌سازی فرآیندهای اساسی تبدیل اشیاء به فرمت برای انتقال یا ذخیره‌سازی هستند. در توسعه موبایل، این مکانیزم‌ها در هر درخواست شبکه‌ای، ذخیره وضعیت و ارتباط بین فرآیندی استفاده می‌شوند. به گزارش MDN Web Docs, 2024، JSON محبوب‌ترین فرمت سریال‌سازی در وب و برنامه‌های موبایل باقی مانده است و از XML و Protocol Buffers پیشی گرفته است.

نکات اصلی

  • سریال‌سازی — تبدیل شیء به دنباله‌ای از بایت‌ها برای انتقال یا ذخیره‌سازی
  • دیسریال‌سازی — فرآیند معکوس بازیابی شیء از نمایش بایتی
  • JSON — فرمت متنی قابل خواندن برای انسان و پشتیبانی شده توسط همه پلتفرم‌ها
  • Protocol Buffers — فرمت باینری گوگل با سرعت بالا و حجم فشرده
  • XML — زبان نشانه‌گذاری توسعه‌پذیر با پشتیبانی از طرح‌های اعتبارسنجی و فضاهای نام

ماهیت سریال‌سازی و دیسریال‌سازی

سریال‌سازی فرآیند تبدیل شیء برنامه به فرمتی مناسب برای ارسال از طریق شبکه یا ذخیره‌سازی روی دیسک است. دیسریال‌سازی تبدیل معکوس را انجام می‌دهد و شیء را از داده‌های دریافتی بازیابی می‌کند. در توسعه موبایل، سریال‌سازی در درخواست‌های API، ذخیره وضعیت صفحه، کش‌کردن و انتقال داده از طریق Intent یا Bundle استفاده می‌شود.

زمانی که نیاز ایجاد می‌شود

هر تعاملی بین اجزای برنامه یا بین برنامه و سرور نیاز به سریال‌سازی دارد. REST API داده‌ها را در JSON یا XML منتقل می‌کند، gRPC از Protocol Buffers استفاده می‌کند، و ارتباط درون‌فرآیندی در Android از Parcelable استفاده می‌کند. بدون سریال‌سازی، نمی‌توان یک شیء پیچیده را از مرز فرآیند عبور داد یا در پایگاه داده ذخیره کرد.

kotlin
// اصل کلی سریال‌سازی
data class User(
    val id: Int,
    val name: String,
    val email: String
)

// سریال‌سازی: شیء -> JSON
fun serializeUser(user: User): String {
    return """{"id":${user.id},"name":"${user.name}","email":"${user.email}"}"""
}

// دیسریال‌سازی: JSON -> شیء
fun deserializeUser(json: String): User? {
    // تجزیه JSON به شیء
    return Gson().fromJson(json, User::class.java)
}
فرمتحجمسرعتقابلیت خواندننوع‌بندی
JSONمتوسطبالابالاپویا
XMLبزرگمتوسطبالاطرح XSD
Protocol Buffersکوچکبسیار بالاپایینسختگیرانه .proto
FlatBuffersکوچکحداکثرپایینسختگیرانه .fbs

JSON — فرمت اصلی توسعه موبایل

JSON (JavaScript Object Notation) یک فرمت متنی سبک بر اساس نحو اشیاء جاوااسکریپت است. JSON از رشته‌ها، اعداد، مقادیر بولی، آرایه‌ها و اشیاء تو در تو پشتیبانی می‌کند که اکثر سناریوهای انتقال داده در برنامه‌های موبایل را پوشش می‌دهد. این فرمت مستقل از پلتفرم است: هر اکوسیستم ابزارهای داخلی برای تجزیه آن ارائه می‌دهد.

مزایای JSON نسبت به جایگزین‌ها

JSON به دلیل سادگی و جهانی بودن برنده است. توسعه‌دهنده برای استفاده اولیه نیازی به طرح ندارد — ساختار در زمان تجزیه به صورت پویا تعیین می‌شود. قابلیت خواندن فرمت اشکال‌زدایی و آزمایش را ساده می‌کند: پاسخ سرور را می‌توان در هر ابزار توسعه‌دهنده مشاهده کرد. در هر دو پلتفرم موبایل، JSON بدون نیاز به کتابخانه‌های شخص ثالث به صورت بومی پردازش می‌شود.

swift
// Codable — سریال‌سازی بومی JSON در 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 گوگل

Protocol Buffers (protobuf) یک فرمت سریال‌سازی باینری است که توسط گوگل برای سیستم‌های با عملکرد بالا توسعه یافته است. برخلاف JSON، protobuf نیاز به تعریف قبلی طرح در فایل .proto دارد، اما حجم داده بسیار کمتر و سرعت پردازش بیشتری را فراهم می‌کند. این فرمت در gRPC، Firebase Firestore و سرویس‌های داخلی گوگل استفاده می‌شود.

ساختار فایل .proto

طرح protobuf پیام‌هایی با فیلدهای نوع‌بندی شده را توصیف می‌کند که هر کدام یک شماره منحصر به فرد دارند. کامپایلر protoc کلاس‌هایی را در زبان مقصد تولید می‌کند که سریال‌سازی و دیسریال‌سازی را به صورت خودکار انجام می‌دهند. Protobuf از تکامل طرح از طریق قوانین افزودن و حذف فیلدها بدون از دست دادن سازگاری عقب‌گرد پشتیبانی می‌کند.

cpp
// تعریف طرح در user.proto
syntax = "proto3";

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

// کد تولید شده در Kotlin
val user = UserProto.User.newBuilder()
    .setId(1)
    .setName("John")
    .setEmail("john@test.com")
    .build()

val bytes: ByteArray = user.toByteArray()

XML و کاربرد آن

XML (eXtensible Markup Language) فرمتی با ساختار سختگیرانه، پشتیبانی از فضاهای نام و اعتبارسنجی از طریق طرح‌های XSD است. XML از نظر فشردگی و سرعت تجزیه از JSON عقب‌تر است، اما در توسعه Android برای فایل‌های layout، AndroidManifest، منابع و پیکربندی‌های Gradle همچنان مورد استفاده قرار می‌گیرد. در iOS، XML در فایل‌های plist و برخی سرویس‌های قدیمی استفاده می‌شود.

تجزیه XML در Android

Android سه روش برای تجزیه XML ارائه می‌دهد: DOM (بارگذاری کل سند در حافظه)، SAX (تجزیه جریانی رویدادمحور) و XmlPullParser (رویکرد ترکیبی). XmlPullParser گزینه توصیه شده برای دستگاه‌های موبایل است، زیرا با حافظه محدود به طور کارآمد کار می‌کند و امکان پردازش سند را در حین خواندن فراهم می‌کند.

kotlin
// XmlPullParser در 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!!)
}

سریال‌سازی در iOS و Android

هر پلتفرم ابزارهای خاص خود را برای سریال‌سازی ارائه می‌دهد. در iOS، مکانیزم اصلی پروتکل Codable با JSONEncoder و JSONDecoder است و برای Objective-C — NSJSONSerialization. Android از کتابخانه‌های Gson، Moshi و kotlinx.serialization استفاده می‌کند. برای انتقال داده بین فرآیندها، Android از Parcelable و iOS از NSKeyedArchiver استفاده می‌کند. پروژه‌های Kotlin به طور فزاینده‌ای kotlinx.serialization را انتخاب می‌کنند — راه‌حلی از JetBrains که از چندپلتفرمی پشتیبانی می‌کند و به بازتاب وابسته نیست و سریال‌سازها را در مرحله کامپایل از طریق پلاگین کامپایلر Kotlin تولید می‌کند.

Parcelable در مقابل Serializable در Android

Android از دو مکانیزم سریال‌سازی برای Intent و Bundle پشتیبانی می‌کند. Serializable مکانیزم استاندارد جاوا است که از بازتاب استفاده می‌کند و منجر به عملکرد پایین می‌شود. Parcelable پروتکلی مخصوص Android است که نیاز به پیاده‌سازی دستی متدهای writeToParcel و createFromParcel دارد، اما به دلیل دستکاری مستقیم بایت‌ها ده‌ها برابر سریع‌تر کار می‌کند.

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

// انتقال از طریق Intent
val intent = Intent(this, DetailActivity::class.java)
intent.putExtra("user", userParcel)
startActivity(intent)

در iOS برای انتقال داده بین کنترلرها از Codable با سریال‌سازی قبلی به Data استفاده می‌شود و برای ارتباط بین فرآیندی — NSKeyedArchiver که اشیاء را به فرمت باینری Property List تبدیل می‌کند. پروژه‌های مدرن در SwiftUI ترجیح می‌دهند داده‌ها را از طریق JSONEncoder برای انتقال بین ماژول‌های برنامه کدگذاری کنند.

امنیت در سریال‌سازی

دیسریال‌سازی نادرست داده‌های غیرقابل اعتماد می‌تواند منجر به آسیب‌پذیری‌ها شود. حملات از طریق سریال‌سازی از متدهای بازنویسی شده readObject در جاوا یا دیسریال‌سازهای ناامن کتابخانه‌های شخص ثالث بهره‌برداری می‌کنند. در Android باید از Serializable برای داده‌های منابع غیرقابل اعتماد اجتناب کرد و به جای آن از Parcelable یا اعتبارسنجی دستی تمام فیلدها پس از دیسریال‌سازی استفاده کرد. در iOS، JSONDecoder به طور پیش‌فرض نسبت به انواع سختگیر است، اما هنگام کار با JSONSerialization توسعه‌دهنده باید انواع را از طریق تبدیل شرطی بررسی کند.

انتخاب فرمت برای پروژه

هنگام انتخاب فرمت سریال‌سازی، الزامات مربوط به عملکرد، حجم داده و سازگاری در نظر گرفته می‌شود. برای REST API و معماری میکروسرویس‌ها، انتخاب بهینه JSON باقی می‌ماند — توسط تمام پلتفرم‌ها و زبان‌ها پشتیبانی می‌شود. برای سیستم‌های پربار و برنامه‌های موبایل با ترافیک محدود، Protocol Buffers ترجیح داده می‌شوند که حجم کمتر و دیسریال‌سازی سریع‌تری را فراهم می‌کنند. XML فقط در سناریوهای پیکربندی و یکپارچگی با سیستم‌های قدیمی توجیه‌پذیر است. در پروژه‌های مدرن، FlatBuffers نیز محبوبیت پیدا می‌کند — فرمت باینری بدون مرحله دیسریال‌سازی که در موتورهای بازی و برنامه‌های با تأخیر حداقل استفاده می‌شود. هر فرمت جایگاه خود را دارد و انتخاب صحیح مستقیماً بر سرعت عملکرد برنامه و حجم ترافیک مصرفی تأثیر می‌گذارد.

سوالات متداول

سریال‌سازی به زبان ساده چیست؟

سریال‌سازی بسته‌بندی شیء برنامه در قالبی است که می‌توان از طریق شبکه ارسال کرد یا در فایل ذخیره نمود. تصور کنید از یک شیء عکس می‌گیرید — عکس سریال‌سازی است و بازسازی شیء از روی عکس دیسریال‌سازی است.

تفاوت JSON با Protocol Buffers چیست؟

JSON یک فرمت متنی قابل خواندن برای انسان و بدون نیاز به طرح است. Protocol Buffers یک فرمت باینری با طرح اجباری (.proto)، حجم بسیار کمتر و سرعت بالاتر است. Protobuf برای سیستم‌های پربار انتخاب می‌شود، JSON برای سازگاری جهانی.

چه زمانی از XML به جای JSON استفاده می‌شود؟

XML استاندارد برای فایل‌های پیکربندی (AndroidManifest، منابع layout)، اسناد با تو در تویی پیچیده و سیستم‌های با اعتبارسنجی سختگیرانه از طریق XSD باقی می‌ماند. XML همچنین در پروتکل‌های SOAP و سیستم‌های قدیمی که نیاز به پشتیبانی از فضاهای نام دارند استفاده می‌شود.

Codable در Swift چیست؟

Codable پروتکل Swift است که Encodable و Decodable را برای سریال‌سازی و دیسریال‌سازی خودکار ترکیب می‌کند. کامپایلر پیاده‌سازی متدهای encode(to:) و init(from:) را برای تمام ویژگی‌های ساختار یا کلاس تولید می‌کند.

کدام سریع‌تر است: Parcelable یا Serializable؟

Parcelable به طور قابل توجهی سریع‌تر از Serializable کار می‌کند، زیرا از بازتاب استفاده نمی‌کند و فیلدها را مستقیماً در جریان بایت می‌نویسد. در دستگاه‌های مدرن، تفاوت می‌تواند به 10 برابر شتاب به نفع Parcelable برسد.

خلاصه

  • سریال‌سازی — تبدیل شیء به فرمت برای انتقال، دیسریال‌سازی — بازیابی معکوس
  • JSON — فرمت متنی جهانی مورد استفاده در REST API و برنامه‌های موبایل
  • Protocol Buffers — فرمت باینری گوگل برای سناریوهای با عملکرد بالا با طرح ثابت
  • XML — فرمت با اعتبارسنجی از طریق XSD، مورد استفاده در پیکربندی‌ها و سیستم‌های قدیمی
  • Parcelable (Android) و Codable (iOS) — مکانیزم‌های سریال‌سازی پلتفرمی برای انتقال داده بین اجزا
  • امنیت سریال‌سازی حیاتی است: داده‌های غیرقابل اعتماد می‌توانند منجر به آسیب‌پذیری‌ها در دیسریال‌سازی شوند

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید