google / google/built_value.dart
serialize and deserialize fails for Enum Map
- Dominant language
- Dart
- Stars
- 886
- Forks
- 195
- Avg merge
- 1d 11h
- Merged PRs (30d)
- 4
Description
I have a variableof type BuiltMap in my model. serialize and deserialize of this model to json is failing
for this variable in json the library is expecting the key to surround two quotes.
on serialization of sample model. i get this **`{"basic":1.0,"allowances":{"\"MEDICAL_REIMBURSEMENT\"":2.0}}`** as output which is invalid json. and also deserialization fails unless i give two quotes
Sample model
```dart
abstract class Salary implements Built {
static Serializer get serializer => _$salarySerializer;
@nullable
double get basic;
@nullable
BuiltMap get allowances;
Salary._();
factory Salary([updates(SalaryBuilder b)]) = _$Salary;
Salary rebuild(void updates(SalaryBuilder b));
SalaryBuilder toBuilder();
}
Salary parseSalary(String jsonStr){
final parsed = json.decode(jsonStr);
Salary salary = standardSerializers.deserializeWith(Salary.serializer, parsed);
return salary;
}
String toJson(Salary salary){
var serializedMap = standardSerializers.serializeWith(Salary.serializer, salary);
return jsonEncode(serializedMap);
}
@BuiltValueEnum(wireName: 'Allowance')
class Allowance extends EnumClass {
static Serializer get serializer => _$allowanceSerializer;
@BuiltValueEnumConst(wireName: 'MEDICAL_REIMBURSEMENT')
static const Allowance MEDICAL_REIMBURSEMENT = _$MEDICAL_REIMBURSEMENT;
@BuiltValueEnumConst(wireName: 'FIXED_MEDICAL_ALLOWANCE')
static const Allowance FIXED_MEDICAL_ALLOWANCE = _$FIXED_MEDICAL_ALLOWANCE;
@BuiltValueEnumConst(wireName: 'CHILD_EDUCATION')
static const Allowance CHILD_EDUCATION = _$CHILD_EDUCATION;
@BuiltValueEnumConst(wireName: 'CHILD_HOTEL_FEE')
static const Allowance CHILD_HOTEL_FEE = _$CHILD_HOTEL_FEE;
@BuiltValueEnumConst(wireName: 'ENTERTAINMENT')
static const Allowance ENTERTAINMENT = _$ENTERTAINMENT;
@BuiltValueEnumConst(wireName: 'LTA')
static const Allowance LTA = _$LTA;
@BuiltValueEnumConst(wireName: 'UNIFORM')
static const Allowance UNIFORM = _$UNIFORM;
@BuiltValueEnumConst(wireName: 'FUEL')
static const Allowance FUEL = _$FUEL;
@BuiltValueEnumConst(wireName: 'TELEPHONE')
static const Allowance TELEPHONE = _$TELEPHONE;
@BuiltValueEnumConst(wireName: 'OTHERS')
static const Allowance OTHERS = _$OTHERS;
const Allowance._(String name) : super(name);
static BuiltSet get values => _$vls;
static Allowance valueOf(String name) => _$vlOf(name);
}
```
```dart
@SerializersFor(const [
Salary,
Allowance,
])
Serializers serializers = _$serializers;
Serializers standardSerializers =
(serializers.toBuilder()..addPlugin(new StandardJsonPlugin())).build();
```
Contributor guide
Assessment
This issue has not been assessed yet.