kotlinx.serialization

kotlin 的官方序列化庫幔欧,通過自動生成代碼來避免反射匙铡。只需要在 kotlin 類上標(biāo)記 @serializable注解就可以撵摆,內(nèi)置標(biāo)準(zhǔn)集合的序列化方法诞挨。 支持 JSON莉撇,CBOR, Protobuf格式

提供的注解

  1. @Serializable 注解 用于標(biāo)記kotlin的類惶傻,為類生成序列化serializer方法棍郎。
  2. @Optional注解 用于標(biāo)記屬性參數(shù),被標(biāo)記的屬性需要提供默認(rèn)數(shù)據(jù)银室⊥康瑁可選參數(shù),如果序列化數(shù)據(jù)中有就使用數(shù)據(jù)提供的蜈敢,沒用就使用默認(rèn)的
  3. @Serialname注解 用于標(biāo)記屬性參數(shù)辜荠,重新定義序列化時的參數(shù)名
  4. @Transient注解 用于標(biāo)記屬性參數(shù), 被標(biāo)記的參數(shù)不參與序列化

JSON 參數(shù)

JSON 類的定義:

class JSON(
    private val unquoted: Boolean = false,
    private val indented: Boolean = false,
    private val indent: String = "    ",
    internal val strictMode: Boolean = true,
    val updateMode: UpdateMode = UpdateMode.OVERWRITE,
    val encodeDefaults: Boolean = true
): ......
  1. unquoted 參數(shù): 無引號模式抓狭,無符號模式下 序列化過程中key值和value值是沒有引號包圍的如:"{a:1}"[一般用于測試]
  2. indented 是否縮進(jìn): 用于多行 JSON 輸出模式
  3. indent 縮進(jìn)字符: 換行縮進(jìn)字符
  4. strictMode 參數(shù): 嚴(yán)格模式下伯病, JSON 轉(zhuǎn)化過程不允許有類中沒有規(guī)定的key值,類序列化過程不允許 NaN 和 無盡浮點(diǎn)數(shù)
  5. updateMode 參數(shù): 更新模式[針對集合]否过,BANNED 禁止出現(xiàn)重復(fù)午笛,OVERWRITE 覆蓋數(shù)據(jù)惭蟋,UPDATE 合并

內(nèi)置對象 JSON.plainJSON.indented药磺, JSON.nonstrict 告组,JSON.unquoted

val plain = JSON()
val unquoted = JSON(unquoted = true)
val indented = JSON(indented = true)
val nonstrict = JSON(strictMode = false)

使用方式

import kotlinx.serialization.Optional
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
import kotlinx.serialization.json.JSON
import kotlinx.serialization.list
import org.junit.Test

class SerializeTest {

  @Serializable
  data class Data(val a: Int, @Optional val b: String = "er", @Transient val c: Int = 5, @SerialName("d") val dd: Float = 7.1f)

  @Test fun testSerialize(){
    System.out.println(JSON.stringify(Data.serializer(), Data(42)))
    System.out.println(JSON.indented.stringify(Data.serializer().list, listOf(Data(42))))
    val obj = JSON.unquoted.parse(Data.serializer(), "{a:2, d: 3.4}")
    System.out.print(obj)

    /*
    {"a":42,"b":"er","d":7.1}  // 默認(rèn)格式
    [
        {
            "a": 42,
            "b": "er",
            "d": 7.1
        }
    ]// 縮進(jìn)格式
    Data(a=2, b=er, c=5, dd=3.4)
     */
  }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市与涡,隨后出現(xiàn)的幾起案子惹谐,更是在濱河造成了極大的恐慌,老刑警劉巖驼卖,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件氨肌,死亡現(xiàn)場離奇詭異,居然都是意外死亡酌畜,警方通過查閱死者的電腦和手機(jī)怎囚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來桥胞,“玉大人恳守,你說我怎么就攤上這事》废海” “怎么了催烘?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長缎罢。 經(jīng)常有香客問我伊群,道長,這世上最難降的妖魔是什么策精? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任舰始,我火速辦了婚禮,結(jié)果婚禮上咽袜,老公的妹妹穿的比我還像新娘丸卷。我一直安慰自己,他們只是感情好询刹,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布谜嫉。 她就那樣靜靜地躺著,像睡著了一般凹联。 火紅的嫁衣襯著肌膚如雪沐兰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天匕垫,我揣著相機(jī)與錄音僧鲁,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛寞秃,可吹牛的內(nèi)容都是我干的斟叼。 我是一名探鬼主播,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼春寿,長吁一口氣:“原來是場噩夢啊……” “哼朗涩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起绑改,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤谢床,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后厘线,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體识腿,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年造壮,在試婚紗的時候發(fā)現(xiàn)自己被綠了渡讼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡耳璧,死狀恐怖成箫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情旨枯,我是刑警寧澤蹬昌,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站攀隔,受9級特大地震影響皂贩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜竞慢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一先紫、第九天 我趴在偏房一處隱蔽的房頂上張望治泥。 院中可真熱鬧筹煮,春花似錦、人聲如沸居夹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽准脂。三九已至劫扒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間狸膏,已是汗流浹背沟饥。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人贤旷。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓广料,卻偏偏與公主長得像,于是被迫代替她去往敵國和親幼驶。 傳聞我的和親對象是個殘疾皇子艾杏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong閱讀 22,405評論 1 92
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理盅藻,服務(wù)發(fā)現(xiàn)购桑,斷路器,智...
    卡卡羅2017閱讀 134,657評論 18 139
  • 前言 人生苦多氏淑,快來 Kotlin 勃蜘,快速學(xué)習(xí)Kotlin! 什么是Kotlin假残? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,209評論 9 118
  • 本文是《法國娜媽談在法國如何做homeschooling》系列的第四篇元旬。錯過開篇的請關(guān)注我的簡書ID“英華奶爸”就...
    英華奶爸閱讀 344評論 0 0
  • 人們在黑夜中行走,已經(jīng)不是第一個人覺得自己看見了火光守问,不過每一個人都不太確定匀归,因?yàn)樘:總€人看到的方向都不一樣...
    南百城閱讀 243評論 0 2