如何使用内置值构建列表
How to build a list using built-value
我有这个问题:
我有一个数组:
[
{
"name": "John",
},
{
"name": "Antonio",
},
{
"name": "Simon",
}
]
我使用built_value,如下我正在尝试反序列化一个json字符串:
library name;
import 'dart:convert';
import 'package:built_collection/built_collection.dart';
import 'package:built_value/built_value.dart';
import 'package:built_value/serializer.dart';
part 'name.g.dart';
abstract class Name implements Built<Name, NameBuilder> {
String get name;
Name._();
factory Name([updates(NameBuilder b)]) = _$Name;
String toJson() {
return json.encode(serializers.serializeWith(Name.serializer, this));
}
static Name fromJson(String jsonString) {
return serializers.deserializeWith(
Name.serializer, json.decode(jsonString));
}
static Serializer<Name> get serializer => _$nameSerializer;
}
据我了解,我将获取名称,但如何从中获取 NameResult 列表?
现在我尝试这样做:
library name_result;
import 'dart:convert';
import 'package:built_collection/built_collection.dart';
import 'package:built_value/built_value.dart';
import 'package:built_value/serializer.dart';
part 'name_result.g.dart';
abstract class NameResult implements Built<NameResult, NameResultBuilder> {
BuiltList<Name> get nameResult;
NameResult._();
factory NameResult([updates(NameResultBuilder b)]) = _$NameResult;
String toJson() {
return json.encode(serializers.serializeWith(NameResult.serializer, this));
}
static NameResult fromJson(String jsonString) {
return serializers.deserializeWith(
NameResult.serializer, json.decode(jsonString));
}
static Serializer<NameResult> get serializer => _$nameResultSerializer;
}
但我收到以下错误:
failed due to: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'String' in type cast occurred in Instance of 'NameBloc'.
我该如何解决这个问题?
serializers.dart
:
const builtListString = FullType(
BuiltList,
[FullType(String)],
);
...
final standardSerializers = (serializers.toBuilder()
..addBuilderFactory(
builtListString,
() => ListBuilder<String>(),
)
..add(Iso8601DateTimeSerializer())
..addPlugin(StandardJsonPlugin()))
.build();
final json = jsonDecode('[{ ... }]');
final names = standardSerializers.deserialize(
json,
specifiedType: builtListString,
) as BuiltList<String>;
我有这个问题:
我有一个数组:
[
{
"name": "John",
},
{
"name": "Antonio",
},
{
"name": "Simon",
}
]
我使用built_value,如下我正在尝试反序列化一个json字符串:
library name;
import 'dart:convert';
import 'package:built_collection/built_collection.dart';
import 'package:built_value/built_value.dart';
import 'package:built_value/serializer.dart';
part 'name.g.dart';
abstract class Name implements Built<Name, NameBuilder> {
String get name;
Name._();
factory Name([updates(NameBuilder b)]) = _$Name;
String toJson() {
return json.encode(serializers.serializeWith(Name.serializer, this));
}
static Name fromJson(String jsonString) {
return serializers.deserializeWith(
Name.serializer, json.decode(jsonString));
}
static Serializer<Name> get serializer => _$nameSerializer;
}
据我了解,我将获取名称,但如何从中获取 NameResult 列表?
现在我尝试这样做:
library name_result;
import 'dart:convert';
import 'package:built_collection/built_collection.dart';
import 'package:built_value/built_value.dart';
import 'package:built_value/serializer.dart';
part 'name_result.g.dart';
abstract class NameResult implements Built<NameResult, NameResultBuilder> {
BuiltList<Name> get nameResult;
NameResult._();
factory NameResult([updates(NameResultBuilder b)]) = _$NameResult;
String toJson() {
return json.encode(serializers.serializeWith(NameResult.serializer, this));
}
static NameResult fromJson(String jsonString) {
return serializers.deserializeWith(
NameResult.serializer, json.decode(jsonString));
}
static Serializer<NameResult> get serializer => _$nameResultSerializer;
}
但我收到以下错误:
failed due to: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'String' in type cast occurred in Instance of 'NameBloc'.
我该如何解决这个问题?
serializers.dart
:
const builtListString = FullType(
BuiltList,
[FullType(String)],
);
...
final standardSerializers = (serializers.toBuilder()
..addBuilderFactory(
builtListString,
() => ListBuilder<String>(),
)
..add(Iso8601DateTimeSerializer())
..addPlugin(StandardJsonPlugin()))
.build();
final json = jsonDecode('[{ ... }]');
final names = standardSerializers.deserialize(
json,
specifiedType: builtListString,
) as BuiltList<String>;