如何在Dart json_serializable序列化时将蛇形命名转为驼峰命名?
用json_serializable实现蛇形JSON到驼峰Dart类的序列化/反序列化
步骤1:配置依赖
在项目的pubspec.yaml里添加必要依赖:
dependencies: flutter: sdk: flutter json_annotation: ^4.8.1 # 版本号可根据实际情况调整 dev_dependencies: flutter_test: sdk: flutter build_runner: ^2.4.4 json_serializable: ^6.7.0
执行dart pub get安装依赖。
步骤2:编写Person类
通过FieldRename.snake参数让json_serializable自动处理蛇形与驼峰的双向映射,类属性采用驼峰命名:
import 'package:json_annotation/json_annotation.dart'; part 'person.g.dart'; @JsonSerializable(fieldRename: FieldRename.snake) class Person { final String firstName; final String lastName; Person({required this.firstName, required this.lastName}); // 从JSON反序列化(蛇形转驼峰) factory Person.fromJson(Map<String, dynamic> json) => _$PersonFromJson(json); // 序列化为JSON(驼峰转蛇形) Map<String, dynamic> toJson() => _$PersonToJson(this); }
步骤3:生成序列化代码
在终端执行命令生成对应的.g.dart文件:
dart run build_runner build
示例验证
假设你的person.json内容是:
{ "first_name": "John", "last_name": "Doe" }
使用时可以这样操作:
// 从JSON文件读取并反序列化 final jsonString = await rootBundle.loadString('assets/person.json'); final jsonMap = jsonDecode(jsonString); final person = Person.fromJson(jsonMap); print(person.firstName); // 输出 John // 将Person对象序列化为蛇形JSON final serializedJson = person.toJson(); print(serializedJson); // 输出 {"first_name":"John","last_name":"Doe"}
核心逻辑就是@JsonSerializable(fieldRename: FieldRename.snake)这个配置,它会自动完成Dart类驼峰属性与JSON蛇形字段的双向映射,无需手动为每个字段添加@JsonKey注解。
内容的提问来源于stack exchange,提问作者s-hunter
相关产品推荐
相关产品推荐

