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

时间:2019-03-01 16:53:16

标签: dart flutter

如何在 Dart 中将-Dcom.sun.net.ssl.checkRevocation=false 类型转换为ObjectMap,因此变量成为键/值对

6 个答案:

答案 0 :(得分:2)

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

例如:

class Human {
  String name;
  int age;

  Map<String, dynamic> toMap() {
    return {
      'name': name,
      'age': age,
    };
  }
}

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

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

答案 1 :(得分:2)

这是一种更简单且不易出错的方法,(如果您已经将这些类用作需要序列化的 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

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

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


}

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

flutter pub run build_runner build --delete-conflicting-outputs

然后像这样使用它。

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

以。 这是一种更好的方法,特别是如果您有包含多个对象的复杂对象。只需确保每个嵌套对象也包含这些更改(JsonSerializable 注释、'part 'class.g.dart'' 和 2 个方法)

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

flutter pub run build_runner build --delete-conflicting-outputs

答案 2 :(得分:1)

您可以查看此包class_to_map

import 'package:class_to_map/class_to_map.dart';
class Test {
  String val1 = "value 1";
  int val2 = 2;
  Map val3 = {"a": "another value"};
}
print(Test().toMap());

// converting map to class
{"val1": 'value 1', "val2": 2, "val3": {"a": "another value"} }.toClass<Test>();

答案 3 :(得分:0)

var keyValuePair = {'name' : Object.name, 'surname':Object.surname};

这将为您提供一个Map对象。

var listOfMaps = List<Map<String, dynamic>>();
listOfMaps.Add({'name' : Object.name, 'surname':Object.surname});

这将为您提供地图列表

答案 4 :(得分:0)

import 'package:queries/collections.dart';
import 'package:queries/queries.dart';

void main() {
  var c = Collection(getPersons());
  var q = c.select((p) => {'age': p.age, 'name': p.name});
  print(q.toList());
}

List<Person> getPersons() {
  return Enumerable.range(20, 3)
      .select$1((e, i) => Person(age: 20 + i, name: 'Person ${i}'))
      .toList();
}

class Person {
  int age;
  String name;
  Person({this.age, this.name});
}

结果(地图列表):

[{age: 20, name: Person 0}, {age: 21, name: Person 1}, {age: 22, name: Person 2}]

答案 5 :(得分:0)

您可以尝试以下方法:

import pymysql
print("Welcome")

ModuleNotFoundError  
 <ipython-input-5-7978bc79cc40> in <module>()
  1 import pymysql
  2 print("Here")

 ModuleNotFoundError: No module named 'pymysql'

在Map dynamic >中使用dynamic,我们可以获取任何类型的map的值。在上面的示例中,它是String。