flutter json 范型
时间: 2025-01-15 17:01:01 浏览: 46
### 如何在 Flutter 中使用泛型解析和生成 JSON 数据
#### 使用 `FlutterJsonBeanFactory` 和泛型处理 JSON 解析
为了有效地处理复杂的 JSON 数据,在 Flutter 应用程序中推荐使用工具如 `FlutterJsonBeanFactory` 来辅助创建模型类。这不仅简化了开发过程,还提高了代码的可维护性和健壮性。
对于从服务器接收到的响应数据,通常会先将其转换成 Dart 的 Map 类型:
```dart
var response = await Dio().get('https://example.com/api/data');
Map<String, dynamic> json = response.data;
```
接着利用 `fromJson` 方法将此 map 转换成具体的业务实体对象。如果该对象内部含有列表或其他嵌套结构,则需进一步指定这些部分的具体类型[^1]。
例如定义了一个名为 `UserModel` 的类来表示用户信息,并通过工厂构造函数实现自定义反序列化逻辑:
```dart
class UserModel {
String name;
int age;
UserModel({required this.name, required this.age});
factory UserModel.fromJson(Map<String, dynamic> json) => UserModel(
name: json['name'],
age: json['age'],
);
Map<String, dynamic> toJson() => {
'name': name,
'age': age,
};
}
```
当涉及到更复杂的数据结构时,比如包含多个不同类型的字段或者是动态变化的内容,这时就需要借助于泛型机制来进行更加灵活的操作。具体来说就是让我们的 Model 支持任意类型的属性值,从而能够适应各种不同的场景需求[^3]。
考虑这样一个例子:有一个 API 返回了一组不同类型的消息记录(文本消息、图片消息等),每条记录都带有一些共同的信息以及特定于其种类的数据项。那么可以在设计对应的 Dart 模型时引入泛型参数 T 表示这部分差异化的组成部分。
```dart
abstract class Message<T> {
final DateTime timestamp;
final T content;
Message(this.timestamp, this.content);
factory Message.fromJson(Map<String, dynamic> json) {
switch (json['type']) {
case 'text':
return TextMessage.fromJson(json);
case 'image':
return ImageMessage.fromJson(json);
default:
throw Exception("Unknown message type");
}
}
Map<String, dynamic> toJson();
}
class TextMessage extends Message<String> {
@override
final String content;
TextMessage(DateTime timestamp, this.content) : super(timestamp, content);
factory TextMessage.fromJson(Map<String, dynamic> json) =>
TextMessage(DateTime.parse(json['timestamp']), json['content']);
@override
Map<String, dynamic> toJson() => {
...super.toJson(),
"type": "text",
"content": content,
};
@override
Map<String, dynamic> toJson() => {"timestamp": timestamp.toIso8601String(), "content": content};
}
// Similar implementation for other types like ImageMessage...
```
上述代码展示了如何基于给定的例子构建支持泛型特性的消息模型体系。这里的关键在于定义抽象基类 `Message<T>` 并为其提供通用的行为模式;而各个子类则负责各自特有的细节实现,包括但不限于 JSON 编解码规则。
阅读全文
相关推荐


















