0

我在我的颤振应用程序中使用 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=[],
  },
}

问题是元素列表是空的。这很奇怪,因为我确信我的元素是序列化的。

任何帮助表示赞赏!

4

1 回答 1

1

我认为

@SerializersFor([WidgetModel])

应该

@SerializersFor([WidgetModel, ObjectList, ElementList, ReferenceData, FormObject])
于 2018-09-20T15:45:12.813 回答