【问题标题】:How to serialize any dart object into json?如何将任何飞镖对象序列化为 json?
【发布时间】:2021-11-20 06:51:05
【问题描述】:

我想将任何对象序列化为 json 字符串。

例如我在成功购买后收到的 PurchaseDetails 对象。

结构如下:

/// Represents the transaction details of a purchase.
class PurchaseDetails {
  PurchaseDetails({
    this.purchaseID,
    required this.productID,
    required this.verificationData,
    required this.transactionDate,
    required this.status,
  });

  final String? purchaseID;

  final String productID;

  final PurchaseVerificationData verificationData;

  final String? transactionDate;

  PurchaseStatus status;

  IAPError? error;

  bool pendingCompletePurchase = false;
}

我们的后端已请求此输出为 JSON,我只需要一种快速的方法来解析它。

有没有这样的方法,如果没有,从第三方库序列化类时的最佳做法是什么?

【问题讨论】:

  • 我真的只需要在调试并遇到断点时执行一次,但我无法从Debug 部分的variables 选项卡中将值复制为Json。如果我能以编程方式完成它会更好,因为它在许多场景中都很有用。

标签: json flutter dart serialization in-app-purchase


【解决方案1】:

您也可以使用Json Serializable,这是一个 dart 包,它使用元编程来构建和处理幕后的序列化代码。

您可以定义要保存的属性、要使用的键,还可以提供自定义转换回调并决定是否序列化空值等等。

【讨论】:

  • 我们正在使用它为我们自己的模型生成可序列化的对象,但是您将如何在其他包中的类上使用它?
  • 您的意思是从另一个对象序列化一个复杂对象作为子类中的一个字段,还是将对象本身序列化,就好像它是您创建的一样?
  • 当您在调试模式下的断点检查对象时,您会看到该对象。然后你可以展开它,显示它的属性。如果其中一个属性是非原始类,如列表或另一个对象,您也可以扩展该属性。您可以继续这样做,直到所有内容都扩展。现在,我想将其转换为 json,以便每个属性都成为一个 Map 条目,其名称作为键,值作为值。这有意义吗?
【解决方案2】:

您可以简单地编写自定义函数,该函数返回可以在 json 中序列化的字符串,例如:

import 'dart:convert';

void main() {
  var c = MyClass();

  print(jsonDecode(c.toString())); // <- here is your json
}

class MyClass {
  String name = "Mark";
  int age = 25;

   @override
  String toString() {
    return '{"name": "$name", "age": "$age"}';
  }
}

编辑: 如果要检查其他对象,也可以使用它: https://www.woolha.com/tutorials/dart-getting-list-of-fields-and-methods-in-a-class

【讨论】:

  • 这只适用于我创建的类。我希望能够将任何对象表示为 JSON。例如,如果我有一个 Theme 对象,我想将其打印为 JSON 字段。如果您使用调试器,它已经显示了 JSON 字符串将具有的树结构。我只需要把它写进代码中。
  • woolha.com/tutorials/…这是你的答案:]
猜你喜欢
  • 2019-07-17
  • 1970-01-01
  • 1970-01-01
  • 2020-01-16
  • 2019-08-13
  • 2018-09-08
  • 1970-01-01
  • 2013-08-26
相关资源
最近更新 更多