Я использую объект JSON в своем приложении.Я сериализирую данные, используя BuiltValue и json.decode ().Проблема в том, что JSON является вложенным и сталкивается с проблемами, решающими правильное значение для использования встроенного значения во вложенном json.Я пробовал читать документацию, но не смог найти сильно вложенный пример.Вот мой json и мой класс, я также предоставляю тестовый пример с выводом для дальнейшего понимания.
import 'package:built_value/built_value.dart';
import 'package:built_value/serializer.dart';
import 'package:built_collection/built_collection.dart';
part 'widget_model.g.dart';
abstract class WidgetModel implements Built<WidgetModel, WidgetModelBuilder>{
ObjectList get formObject;
WidgetModel._();
static Serializer<WidgetModel> get serializer => _$widgetModelSerializer;
factory WidgetModel([updates(WidgetModelBuilder b)]) = _$WidgetModel;
}
abstract class ObjectList implements Built<ObjectList, ObjectListBuilder>{
ElementList get listOfElements;
ObjectList._();
static Serializer<ObjectList> get serializer => _$objectListSerializer;
factory ObjectList([updates(ObjectListBuilder b)]) = _$ObjectList;
}
abstract class ElementList implements Built<ElementList, ElementListBuilder>{
BuiltList<FormObject> get elements;
ElementList._();
static Serializer<ElementList> get serializer => _$elementListSerializer;
factory ElementList([updates(ElementListBuilder b)]) = _$ElementList;
}
abstract class ReferenceData implements Built<ReferenceData, ReferenceDataBuilder>{
String get value;
String get key;
ReferenceData._();
static Serializer<ReferenceData> get serializer => _$referenceDataSerializer;
factory ReferenceData([updates(ReferenceDataBuilder b)]) = _$ReferenceData;
}
abstract class FormObject implements Built<FormObject, FormObjectBuilder> {
@BuiltValueField(wireName: 'textAlign')
String get textAlign;
@BuiltValueField(wireName:'references')
BuiltList<ReferenceData> get references;
FormObject._();
static Serializer<FormObject> get serializer => _$formObjectSerializer;
factory FormObject([updates(FormObjectBuilder b)]) = _$FormObject;
}
Мой файл сериализатора:
import 'package:built_collection/built_collection.dart';
import 'package:built_value/serializer.dart';
import 'package:built_value/standard_json_plugin.dart';
import 'package:stepper/src/model/widget_model.dart';
part 'serializers.g.dart';
@SerializersFor([WidgetModel])
final Serializers serializers =
(_$serializers.toBuilder()..addPlugin(StandardJsonPlugin())).build();
Вот мой тестовый пример:
import 'dart:convert';
import 'package:stepper/src/model/serializers.dart';
import 'package:stepper/src/model/widget_model.dart';
import 'package:test/test.dart';
main() {
String formObjectString = """{
"FORMOBJECT": {
"elements" : [{
"textAlign": "left",
"references": [{
"value": "2018",
"key": "year"
}]
}]
}
}""";
group('test form object', (){
test('test', () {
ObjectList formObject = serializers.deserializeWith(ObjectList.serializer, json.decode(formObjectString));
print(formObject);
});
});
}
Вот вывод (напечатанный formObject):
ObjectList {
listOfElements=ElementList {
elements=[],
},
}
Проблема в том, что список элементов пуст.Это странно, потому что я уверен, что мои элементы сериализованы.
Любая помощь приветствуется!