【问题标题】:How to serialize GeoPoint using dart json_serializable package如何使用 dart json_serializable 包序列化 GeoPoint
【发布时间】:2021-07-29 18:23:39
【问题描述】:
【问题讨论】:
标签:
firebase
flutter
google-cloud-firestore
【解决方案1】:
经过更多的挖掘并试图了解事情的运作方式。我已经设法通过在课堂上写下以下内容来解决我的问题。
@JsonKey(fromJson: _fromJsonGeoPoint, toJson: _toJsonGeoPoint)
GeoPoint location;
static GeoPoint _fromJsonGeoPoint(GeoPoint geoPoint) {
return geoPoint;
}
static GeoPoint _toJsonGeoPoint(GeoPoint geoPoint) {
return geoPoint;
}
我想这个想法只是不对 GeoPoint 对象进行任何更改。无论如何,我很想听到这是正确的方法,或者有更好的方法来做到这一点。干杯!
【解决方案2】:
您的解决方案对我不起作用。例如,如果您尝试在对象上使用 jsonEncode,它将失败。欢迎其他人的反馈。这是我的建议:
@JsonKey(fromJson: _fromJsonGeoPoint, toJson: _toJsonGeoPoint)
GeoPoint position;
static GeoPoint _fromJsonGeoPoint(GeoPoint geoPoint) { return geoPoint; }
///A Map should be returned here to properly generate the json
static Map<String, dynamic> _toJsonGeoPoint(GeoPoint geoPoint) {
return {"latitude": geoPoint.latitude, "longitude":
geoPoint.longitude};
}
【解决方案3】:
Firestore 返回的类型是 GeoPoint,你可以直接通过
使用 JsonConverter:
class GeoPointConverter
implements JsonConverter<GeoPoint, GeoPoint> {
const GeoPointConverter();
@override
GeoPoint fromJson(GeoPoint geoPoint) {
return geoPoint;
}
@override
GeoPoint toJson(GeoPoint geoPoint) =>
geoPoint;
}
之后,注释您的参数:
@GeoPointConverter() required GeoPoint location