使用kotlinx.serialization将json对象的属性反序列化为String

问题描述

给出如下json,payload对象的结构将有所不同:

{
    "id": 1,"displayName": "Success","payload": {
        "someProperty": "example","someOtherProperty": {
            "somenestedProperty": "example"
        }
    }
}

...使用kotlinx.serialization如何将其反序列化为以下数据类,其中payload的值应为有效负载对象的原始json字符串。

@Serializable
data class Stub(
    val id: Int,val displayName: String,val payload: String
)

解决方法

努力寻找一种使用序列化器实现此目的的方法,但是它很简单,可以使用'use strict'; const html = ` <!doctype html> <html> <head><meta charset='UTF-8'><title>Test</title></head> <body> <div class="class1" data-id="id1"> <span class="class2"> "text1" </span> </div> <div class="class1" data-id="id2"> <span class="class2"> "text2" </span> </div> <div class="class1" data-id="id1"> <span class="class2"> "text1" </span> </div> <div class="class1" data-id="id3"> <span class="class2"> "text3" </span> </div> </body> </html>`; const puppeteer = require('puppeteer'); (async function main() { try { const browser = await puppeteer.launch(); const [page] = await browser.pages(); await page.goto(`data:text/html,${html}`); // Way 1. { const allClass1InPage = await page.$$(".class1"); for (const class1El of allClass1InPage) { console.debug(await class1El.$eval(".class2",class2El => `${class2El.parentNode.dataset.id}: ${class2El.innerText}` )); } } console.log(); // Way 2. { const allClass1InPage = await page.$$('.class1'); for (const class1El of allClass1InPage) { const datasetHandle = await class1El.getProperty('dataset'); const idHandle = await datasetHandle.getProperty('id'); const id = await idHandle.jsonValue(); const spanHandle = await class1El.$('.class2'); const textHandle = await spanHandle.getProperty('innerText'); const text = await textHandle.jsonValue(); console.log(`${id}: ${text}`); } } console.log(); // Way 3. { const data = await page.evaluate( () => [...document.querySelectorAll('.class1')].map(element => `${element.dataset.id}: ${element.querySelector('.class2').innerText}`) ); console.log(data.join('\n')); } await browser.close(); } catch (err) { console.error(err); } })(); 手动实现。

JsonElement