簡體   English   中英

Dart/Flutter:在轉換為 JSON 時,避免 Map 中的方法解析?

[英]Dart/Flutter : Avoid Method parsing in Map , when converting to JSON?

在 Dart / Flutter 中,當將 map (其中包含閉包方法)轉換為 Z466DEEC76ECDF1F,IDFCA6D387 時出現以下錯誤

Converting object to an encodable object failed: Closure: () => dynamic

Map 具有:

orderedMap1["fooddelete"] = () => deleteItemFunction(
          singleitem["orderId"], singleitem["id"], singleitem["shopId"]);

如果在上面的行注釋,則 jsonEncode 有效,否則拋出上述錯誤。

將Map解析為Json時如何指示jsonEncode跳過閉包?

將閉包存儲在要編碼為 JSON 的同一個Map中似乎非常值得懷疑,但如果必須,您可以對其進行過濾后的副本進行編碼:

var encoded = jsonEncode({
  for (var entry in orderedMap1.entries)
    if (entry.value is! Function) entry.key: entry.value,
});

我想您也可以使用jsonEncodetoEncodable參數將閉包轉換為其他東西,盡管我不確定這對您有什么好處,因為接收者對此無能為力。 以下將用null替換閉包:

var encoded = jsonEncode(orderedMap, toEncodable: (value) {
  if (value is Function) {
    return null;
  }
  throw UnsupportedError('Cannot convert to JSON: $value');
});

選項1:使用orderedMap1.remove("fooddelete")刪除“fooddelete”鍵,然后解析它。

選項2:將您的閉包放在雙引號內。 所以你可以將它保存為字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM