在 Dart 中,如何在不使用“dynamic”且不使用代码生成的情况下将类序列化为 JSON 或从 JSON 序列化类?喜欢 C# 版的 Netwsoft?

问题描述 投票:0回答:1

我有一堂这样的课:

class UserModel {
  String id = '';
  String firstName = '';
  String lastName = '';
  String email = '';
  String phoneNumber = '';
  String? createdDate = '';
  String? membershipType = '';

  UserModel({
    required this.id,
    required this.firstName,
    required this.lastName,
    required this.email,
    required this.phoneNumber,
    required this.createdDate,
    required this.membershipType
  });

  UserModel.fromJson(Map<String, dynamic> json) {
    id = json['id'];
    firstName = json['firstName'];
    lastName = json['lastName'];
    email = json['email'];
    phoneNumber = json['phoneNumber'];
    createdDate = json['createdDate'];
    membershipType = json['membershipType'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = <String, dynamic>{};
    data['id'] = id;
    data['firstName'] = firstName;
    data['lastName'] = lastName;
    data['email'] = email;
    data['phoneNumber'] = phoneNumber;
    data['createdDate'] = createdDate;
    data['membershipType'] = membershipType;
    return data;
  }
}

我想避免使用

dynamic
类型,并且我想干净地处理格式错误的 JSON 可能发生的错误。我还想避免代码生成,因为它会弄乱我的构建管道并给我的项目带来大量开销。

是否有一个库使用泛型或其他功能来提供更好的开发人员体验?有没有更好的方法可以手动实现JSON序列化而不需要

dynamic

flutter dart jsonserializer dynamictype
1个回答
0
投票

不幸的是,目前不可能,除非使用代码生成器或手动。有一个名为 Dart 宏的实验性提案:

“Dart 宏系统是目前正在开发的一项主要新语言功能,它为 Dart 语言添加了对静态元编程的支持。

Dart 宏是一段用户可定义的代码,它接受其他代码作为参数并对其进行实时操作以创建、修改或添加声明。”

在文档中,您可以看到如何安装和测试它,第一个用例的示例就是这种情况。使用

JsonCodable
注释可以让您的类自动生成
fromJson
toJson
方法。

更多信息请访问:Dart 宏文档

© www.soinside.com 2019 - 2024. All rights reserved.