как сделать общедоступное свойство даже с подчеркиванием в дротике?
Я получаю данные json с сервера api отдыха, и один из его ключей _id
и мне нужно сериализовать этот json в объект dart с помощью built_value, но это запрещено, потому что в dart _id
является частным, а built_value не позволяет мне определять частный получатель в моей модели!
Так что же мне делать?
3 ответа
package:built_value
есть механизм переименования полей. Как упоминалось в README.md
:
Соответствующий класс дротиков, использующий
built_value
может выглядеть так. Обратите внимание, что он использует...@BuiltValueField
аннотация для сопоставления имени свойства в ответе и имени переменной-члена вPerson
учебный класс.... @nullable @BuiltValueField(wireName: 'first_name') String get firstName;
Итак, в вашем случае вы должны уметь делать что-то вроде:
@BuiltValueField(wireName: '_id')
String get id;
Я понял! Я могу заменить_id
с участием id
как это:
factory User.fromJson(Map<String, dynamic> jsonData) {
Map<String, dynamic> map = {
...jsonData, // add all of jsonData key-value pairs to the map
'id': jsonData['_id'], // assign the value of _id to id
'_id': null, // replace _id value with null
};
return serializers.deserializeWith(User.serializer, map);
}
Вы можете заменить'_id'
с'id'
как только вы получите строку ответа JSON. Затем сериализуйте его.
Класс модели:
@JsonSerializable(explicitToJson: true)
class PersonModel{
int id;
String name;
PersonModel(this.id,this.name);
factory PersonModel.fromJson(Map<String, dynamic> json) => _$PersonModel FromJson(json);
Map<String, dynamic> toJson() => _$PersonModelToJson(this);
}
Заменять :
String responseString = response.body
String newResponseString = responseString.replaceAll('_id', 'id');
PersonModel personModel = PersonModel.fromJson(jsonDecode(newResponseString));
Теперь вы можете использоватьpersonModel.id
получить доступ_id
во внешнем интерфейсе.