Сериализация Dart json, как бороться с _id из mongodb, который является приватным в Dart? - PullRequest
1 голос
/ 02 марта 2020

Я использую автоматику c сериализация / десериализация в дротике, как упомянуто здесь

import 'package:json_annotation/json_annotation.dart';

part 'billing.g.dart';

@JsonSerializable()
class Billing {
  Billing(){}
  String _id;
  String name;
  String status;
  double value;
  String expiration;
  factory Billing.fromJson(Map<String, dynamic> json) => _$BillingFromJson(json);
  Map<String, dynamic> toJson() => _$BillingToJson(this);
}

Но для того, чтобы сериализация / десериализация работала, поля должны быть опубликованы c. Однако в Dart поле с _ в начале является закрытым. Поэтому я не могу использовать _id из mongodb для сериализации / десериализации вещей.

Как мне преодолеть это?

1 Ответ

1 голос
/ 02 марта 2020

Вы можете использовать аннотацию @JsonKey. См. https://pub.dev/documentation/json_annotation/latest/json_annotation/JsonKey/name.html

import 'package:json_annotation/json_annotation.dart';

part 'billing.g.dart';

@JsonSerializable()
class Billing {
  Billing(){}

  // Tell json_serializable that "_id" should be
  // mapped to this property.
  @JsonKey(name: '_id')
  String id;
  String name;
  String status;
  double value;
  String expiration;
  factory Billing.fromJson(Map<String, dynamic> json) => _$BillingFromJson(json);
  Map<String, dynamic> toJson() => _$BillingToJson(this);
}

...