【问题标题】:How to serialize dynamic keys of a json with kotlinx如何使用 kotlinx 序列化 json 的动态键
【发布时间】:2020-03-09 11:22:52
【问题描述】:

我有一个带有这种键的 json:

...
    "metaData": {
        "date:create": "2019-11-13t15:42:02+01:00",
        "date:modify": "2019-11-13t15:42:02+01:00",
        "exif:ColorSpace": "1",
        "exif:ExifImageLength": "1500",
        "exif:ExifImageWidth": "1125",
        "exif:ExifOffset": "38",
        "exif:Orientation": "1",
        "jpeg:colorspace": "2",
        "jpeg:sampling-factor": "1x1,1x1,1x1"
    },
...

metaData 对象中的所有键都是动态的(不是真的,但有数百个不同的键)我如何序列化这个对象而不必创建一个包含所有可能键的类。

这是我的作品:

@Serializable
data class Image(
    val name: String? = null,
    val uid: String,
    val createdAt: String? = null,
    val updatedAt: String? = null,
    val metaData: MetaData? = null,
)

@Serializable
data class MetaData (
    @SerialName("date:create")
    val dateCreate: String,

    @SerialName("date:modify")
    val dateModify: String,

    @SerialName("exif:ColorSpace")
    val exifColorSpace: String,

    @SerialName("exif:ExifImageLength")
    val exifExifImageLength: String,

    @SerialName("exif:ExifImageWidth")
    val exifExifImageWidth: String,

    @SerialName("exif:ExifOffset")
    val exifExifOffset: String,

    @SerialName("exif:Orientation")
    val exifOrientation: String,

    @SerialName("jpeg:colorspace")
    val jpegColorspace: String,

    @SerialName("jpeg:sampling-factor")
    val jpegSamplingFactor: String
)

【问题讨论】:

    标签: kotlin serialization kotlinx.serialization


    【解决方案1】:

    您可以使用 JSONObject 动态序列化元数据。您的 Metadata 类对这个解决方案毫无用处,您的 Image 实例将有一个 JSONObject 作为元数据属性:

    data class Image(
        val name: String? = null,
        val uid: String,
        val createdAt: String? = null,
        val updatedAt: String? = null,
        val metaData: JSONObject? = null,
    )
    

    【讨论】:

      猜你喜欢
      • 2012-11-11
      • 2023-01-17
      • 2019-05-16
      • 2020-09-15
      • 2019-05-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多