如何在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()。
我在大多数实体类中都这样做。
这是一种更简单且不易出错的方法(如果您已经将这些类用作需要序列化的 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)
| 归档时间: |
|
| 查看次数: |
2392 次 |
| 最近记录: |