Kotlinx.Serialization рдХреЗ рд╕рд╛рде рдХреЛрдЯрд▓рд┐рди рдХреЛ рд╕реАрд░рд┐рдпрд▓ рдХрд░рдирд╛



рдПрдХ рдмрд╣реБ-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЬреЛ .framework рдФрд░ .ar рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХреЛ рдПрдХрддреНрд░ рдХрд░рддреА рд╣реИ, рдореИрдВ рдЗрд╕ рдирддреАрдЬреЗ рдкрд░ рдкрд╣реБрдВрдЪрд╛ рдХрд┐ рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рд╕рд╛рд░реА рдЙрдкрдпреЛрдЧреА рдЪреАрдЬреЗрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдореЗрдВ рд╕реЗ рдХрдИ рд▓реЛрдЧ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрднреА рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдереЗред

рдорд▓реНрдЯреА-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╕рдордп рдЖрдкрдХреЛ рдЬрд┐рди рдЪреАрдЬрд╝реЛрдВ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рд╡реЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдбреЗрд╡рд▓рдк рдХрд░рддреЗ рд╕рдордп рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╣реИрдВред рдХреЛрдЯрд▓рд┐рди рджреНрд╡рд╛рд░рд╛ рджрд┐рдП рдЧрдП рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЛ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рд░рдЦрдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдЬрдм рдореИрдВ рдПрдХ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖ рдЧрдпрд╛ рдЬрдм рдПрдХ JSON рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рдХреНрд░рдорд╛рдВрдХрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА рдЬреЛ рджреЛ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ (iOS рдФрд░ Android) рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рддреЛ iOS рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВред рдереЛрдбрд╝реА рдЦреЛрдЬ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдХреЛрдЯрд▓рд┐рдиреИрдХреНрд╕ рд╕реАрд░рд┐рдпрд▓рд┐рдпрд▓рдЬрд╝реЗрд╢рди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдорд┐рд▓реАред
рд╕рдЪ рдХрд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрднреА рдкрддрд╛ рдирд╣реАрдВ рдерд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдкреНрд░рдХрд╛рд╢рди рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╣реИ, рдЬреЛ рдореЗрд░реА рддрд░рд╣ рд╣реА рдЗрд╕ рдЙрдкрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдереЗред

рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛рдлреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЧрд┐рдереБрдм рднрдВрдбрд╛рд░ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ ред рд▓реЗрдХрд┐рди рдореИрдВ рдПрдВрдбреНрд░реЙрдЗрдб рдФрд░ рдорд▓реНрдЯреА-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдЙрдкрдпреЛрдЧ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реВрдВрдЧрд╛ред

рдорд▓реНрдЯреА-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╕рдВрдХрд▓рди рдХреЗ рд╕рд╛рде рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ, рдЬреЛ рдЖрдкрдХреЗ рдореВрд▓ рдЧреНрд░реИрдВрдб рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдЕрдВрдд рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред

implementation org.jetbrains.kotlinx:kotlinx-serialization-runtime-native:0.9.1 

рдмрд╣реБ-рдордВрдЪ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЧреНрд░реБрдВрдбрд▓ рдЙрджрд╛рд╣рд░рдг


 plugins { id 'kotlin-multiplatform' version '1.3.11' id 'kotlinx-serialization' version '1.3.10' } repositories { google() jcenter() mavenCentral() maven { url "https://kotlin.bintray.com/kotlinx" } } apply plugin: 'com.android.library' apply plugin: 'kotlin-android-extensions' android { compileSdkVersion 28 defaultConfig { minSdkVersion 15 targetSdkVersion 28 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support.constraint:constraint-layout:1.1.3' androidTestImplementation 'com.android.support.test:runner:1.0.2' } kotlin { targets { fromPreset(presets.android, 'android') //    iPhone //   presets.iosArm64 ( iosArm32)     iPhone fromPreset(presets.iosX64, 'ios') { compilations.main.outputKinds('FRAMEWORK') } } sourceSets { commonMain { dependencies { implementation 'org.jetbrains.kotlin:kotlin-stdlib-common' implementation 'org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.9.1' } } commonTest { dependencies { implementation 'org.jetbrains.kotlin:kotlin-test-common' implementation 'org.jetbrains.kotlin:kotlin-test-annotations-common' } } androidMain { dependencies { implementation 'org.jetbrains.kotlin:kotlin-stdlib' } } androidTest { dependencies { } } iosMain { dependencies{ implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime-native:0.9.1" } } iosTest { } } } 

Android рдХреЗ рд▓рд┐рдП


 apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlinx-serialization' android { compileSdkVersion 28 defaultConfig { applicationId "com.example.smile.kotlinxretrosample" minSdkVersion 16 targetSdkVersion 28 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.9.1" implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support.constraint:constraint-layout:1.1.3' implementation 'com.android.support:design:28.0.0' implementation 'com.squareup.retrofit2:retrofit:2.5.0' implementation 'com.squareup.okhttp3:okhttp:3.12.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' } 

рдХреНрд░рдордмрджреНрдзрддрд╛


рдПрдХ рд╡рд░реНрдЧ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдЗрд╕рдХреЗ рд╕рд╛рдордиреЗ @Serializable рдПрдиреЛрдЯреЗрд╢рди рдЬреЛрдбрд╝реЗрдВ

 import kotlinx.serialization.Serializable @Serializable class Field { var length: Int = 0 var hint: String = "" var required: Boolean = false } 

рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬреЗрд╢рди рднреА рдбреЗрдЯрд╛ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЕрдм, JSON рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░рдиреЗ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред

 /* * { length = 20 hint = "example" required= false } */ fun toObject(stringValue: String): Field { return JSON.parse(Field.serializer(), stringValue) } fun toJson(field: Field): String { //  ,    Serializer,       //   ,     @Serializer return JSON.stringify(Field.serializer(), field) } 

@Transient рдФрд░ @Optional


рдЙрд▓реНрд▓реЗрдЦ рдХреЗ рд▓рд╛рдпрдХ рджреЛ рдЕрдиреНрдп рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рд╣реИрдВ:

  • @Transient - @Transient рдХрд┐ рдлрд╝реАрд▓реНрдб рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
  • @Optional - рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рдмрдВрдж рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдФрд░ рдлрд╝реАрд▓реНрдб рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реЛрдиреЗ рдкрд░ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдЕрднреА рднреА рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

 @Optional var isOptional: Boolean = false @Transient var isTransient: Boolean = false 

рд░рд┐рдЯреНрд░реЛрдлрд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Android рдЙрджрд╛рд╣рд░рдг


рдЬреЛ рд▓реЛрдЧ Android рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдЗрд╕ рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП Retrofit 2 рдореЗрдВ рдПрдХ рдПрдбреЗрдкреНрдЯрд░ рд╣реИред рдПрдбреЙрдкреНрдЯрд░ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ ред

рдереЛрдбрд╝рд╛ рд╕рд╛ рдХреЛрдб:

 un createRetrofit(): Retrofit { val contentType = MediaType.get("application/json") return Retrofit.Builder() .addConverterFactory(serializationConverterFactory(contentType, JSON)) .baseUrl(BASE_URL) .client(provideOkhttpClient()) .build() } 

рдпрджрд┐ рдЖрдкрдХреА рдХрдХреНрд╖рд╛ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдиреЛрдЯреЗрд╢рди рд╣реИрдВ, рддреЛ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреА рдХрдХреНрд╖рд╛ рдХреЛ JSON рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рдХрд┐рд╕реА рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдХреНрд░рдордмрджреНрдзрддрд╛ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдЬреЛрдбрд╝ рд╣реИ рдФрд░ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдпрд╛ JSON рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓, рдХрдо рд╢реНрд░рдо-рдЧрд╣рди рдмрдирд╛рддрд╛ рд╣реИред

рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рд╕реВрдЪреА


  1. KotlinxRetrofit Android рдкрд░ рдХреНрд░рдорд╛рдВрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рдХрд╛рд░реНрдпрд╢реАрд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИ
  2. kotlinx.serialization - рдореБрдЦреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рднрдВрдбрд╛рд░

JakeWharton / retrofit2-kotlinx-serialization- рдХрдирд╡рд░реНрдЯрд░ - рд░реЗрдЯреНрд░реЛрдлрд┐рдЯ рдХреЗ рд▓рд┐рдП рдПрдбрд╛рдкреНрдЯрд░

Source: https://habr.com/ru/post/hi437726/


All Articles