如何序列化GeoPoint flutter?

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

flutter pub run build_runner build 在 geoPoint 上出现错误。错误提示:要支持

GeoPoint
类型,您可以:使用
JsonConverter
。 我该如何实施?

班级

 ...
@JsonSerializable()
class Person{
  late final String name;
  final List<Location> location;

  Person(
      {required this.uid,
      required this.name,
      required this.location});

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

@JsonSerializable()
class Location {
  String name;
  GeoPoint geoPoint;

  Location({required this.name, required this.geoPoint});
  factory Location.fromJson(Map<String, dynamic> json) =>
      _$LocationFromJson(json);

  Map<String, dynamic> toJson() => _$LocationToJson(this);
}
json flutter serialization
2个回答
1
投票

颜色示例:

@JsonSerializable()
class Line {
  Line({required this.name, required this.color});

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

  String name;

  @ColorSerializer()
  Color color;
  

  Map<String, dynamic> toJson() => _$LineToJson(this);
}

class ColorSerializer implements JsonConverter<Color, int> {
  const ColorSerializer();

  @override
  Color fromJson(int json) => Color(json);

  @override
  int toJson(Color color) => color.value;
}

你的代码应该是这样的:

@JsonSerializable()
class Line {
  Line({required this.name, required this.color});

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

  String name;

  @GeoPointSerializer()
  GeoPoint geoPoint;
  

  Map<String, dynamic> toJson() => _$LineToJson(this);
}

class GeoPointSerializer implements JsonConverter<GeoJson, List<int,int>> {
  const GeoPointSerializer();

  @override
  GeoPoint fromJson(List<int,int> json) => GeoPoint(x:json[0],json[1]);

  @override
  List<int,int> toJson(GeoPoint geoPoint) => [geoPoint.x,geoPoint.y];
}

0
投票

我也有同样的问题,兄弟,

你可以这样使用;

class GeoPointJsonConverter extends JsonConverter<GeoPoint, List<double>> {
  const GeoPointJsonConverter();
  @override
  GeoPoint fromJson(List<double> json) {
    return GeoPoint(json[0], json[1]);
  }

  @override
  List<double> toJson(GeoPoint object) {
    return [object.latitude, object.longitude];
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.