如何在Dart中将Class对象转换为数据结构“ Map”或“ Maps List”?

dev*_*tel 5 dart flutter

如何在Dart中将Object类型转换为a Map或a ,以便变量成为键/值对List of Maps

小智 8

根据我的经验,dart尚未提供这种系统。因此,基本上,我们创建了类似的函数toMap(),该函数将对象手动转换为映射的键值对。

例如:

class Human {
  String name;
  int age;

  Map<String, dynamic> toMap() {
    return {
      'name': name,
      'age': age,
    };
  }
}
Run Code Online (Sandbox Code Playgroud)

因此,稍后有一个Human对象时,您可以调用human.tomap()

我在大多数实体类中都这样做。

  • 他使用的是动态,因为值可能是字符串、整数或布尔值。声明动态类型将在运行时分配变量的类型 (3认同)

Ter*_*iel 7

这是一种更简单且不易出错的方法(如果您已经将这些类用作需要序列化的 DTO 对象,那么这是双赢)。

在 pubsec.yaml 中添加以下 3 个依赖项

dependencies:
  flutter:
    sdk: flutter
  json_annotation:^3.1.1

dev_dependencies:
  flutter_test:
    sdk: flutter
  build_runner: ^1.10.11
  json_serializable: ^3.2.5

Run Code Online (Sandbox Code Playgroud)

在您想要获取其地图的类中,执行以下操作。

part 'person.g.dart';

@JsonSerializable(explicitToJson: true)
class Person{
String name;
String surname;
Person(this.name,this.surname);

//make sure you have the (Just change part of the method name to your class name)

 factory Person.fromJson(Map<String, dynamic> json) =>
      _$PersonFromJson(json);

  Map<String, dynamic> toJson() => _$PersonToJson(this);//Replace 'Person' with your class name


}
Run Code Online (Sandbox Code Playgroud)

就是这样,您只需在终端中运行以下命令,这样 flutter 就可以为您生成“toMap()”方法。

dependencies:
  flutter:
    sdk: flutter
  json_annotation:^3.1.1

dev_dependencies:
  flutter_test:
    sdk: flutter
  build_runner: ^1.10.11
  json_serializable: ^3.2.5

Run Code Online (Sandbox Code Playgroud)

然后像这样使用它。

var person =Person('somename','some surname');//This is object
Map personMap =person.toJson();

Run Code Online (Sandbox Code Playgroud)

埃兹。这是一种更好的方法,尤其是当您有包含多个对象的复杂对象时。只需确保每个嵌套对象也包含这些更改(JsonSerialized 注释、“部分 'class.g.dart'' 和 2 个方法)”

注意:如果对类进行属性更改,只需再次运行此命令即可。

part 'person.g.dart';

@JsonSerializable(explicitToJson: true)
class Person{
String name;
String surname;
Person(this.name,this.surname);

//make sure you have the (Just change part of the method name to your class name)

 factory Person.fromJson(Map<String, dynamic> json) =>
      _$PersonFromJson(json);

  Map<String, dynamic> toJson() => _$PersonToJson(this);//Replace 'Person' with your class name


}
Run Code Online (Sandbox Code Playgroud)

  • 惊人的!这绝对应该是最重要且被接受的答案! (2认同)