Flutter JSON序列化插件flexible_json_serializable的使用

Flutter JSON序列化插件flexible_json_serializable的使用

flexible_json_serializable 基于 package:json_serializable,并处理将JSON解析为对象时不抛出异常。

支持类型(无需异常处理,可选类型)

  • BigInt
  • bool
  • DateTime
  • double
  • int
  • List
  • Map
  • Object
  • String
  • Uri

示例

左侧:json_serializable

右侧:flexible_json_serializable


完整示例代码

以下是一个完整的示例,展示如何使用 flexible_json_serializable 进行JSON序列化和反序列化。

// 导入必要的库
import 'package:flutter/material.dart';
import 'package:json_annotation/json_annotation.dart';

// 生成的文件部分
part 'example.g.dart';

// 使用 [@JsonSerializable](/user/JsonSerializable) 注解标记类
[@JsonSerializable](/user/JsonSerializable)()
class Person {
  // 假设这些值存在于JSON中
  final String firstName, lastName;

  // 处理如果对应的JSON值不存在或为空的情况
  final DateTime? dateOfBirth;

  // 构造函数
  Person({required this.firstName, required this.lastName, this.dateOfBirth});

  // 将生成的 fromJson 方法连接到工厂构造函数
  factory Person.fromJson(Map<String, dynamic> json) => _$PersonFromJson(json);

  // 将生成的 toJson 方法连接到 toJson 方法
  Map<String, dynamic> toJson() => _$PersonToJson(this);
}

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('flexible_json_serializable 示例'),
        ),
        body: Center(
          child: ExampleWidget(),
        ),
      ),
    );
  }
}

class ExampleWidget extends StatefulWidget {
  [@override](/user/override)
  _ExampleWidgetState createState() => _ExampleWidgetState();
}

class _ExampleWidgetState extends State<ExampleWidget> {
  late Person person;

  [@override](/user/override)
  void initState() {
    super.initState();
    // 初始化 Person 对象
    person = Person(
      firstName: 'John',
      lastName: 'Doe',
      dateOfBirth: DateTime(1990, 1, 1),
    );

    // JSON 序列化
    Map<String, dynamic> personJson = person.toJson();
    print('序列化后的 JSON: $personJson');

    // JSON 反序列化
    Person decodedPerson = Person.fromJson(personJson);
    print('反序列化后的 Person: ${decodedPerson.firstName} ${decodedPerson.lastName}');
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Container();
  }
}

更多关于Flutter JSON序列化插件flexible_json_serializable的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter JSON序列化插件flexible_json_serializable的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用flexible_json_serializable插件来进行JSON序列化和反序列化的代码案例。

1. 添加依赖

首先,你需要在pubspec.yaml文件中添加flexible_json_serializable依赖:

dependencies:
  flutter:
    sdk: flutter

dev_dependencies:
  build_runner: ^2.0.4
  flexible_json_serializable: ^3.0.0  # 请检查最新版本号

2. 创建数据模型

假设我们有一个用户数据模型User,我们希望通过flexible_json_serializable来生成其序列化代码。

import 'package:flexible_json_serializable/flexible_json_serializable.dart';

part 'user.g.dart';  // 生成代码的文件

@flexibleJsonSerializable
class User {
  final String name;
  final int age;
  final String email;

  User({required this.name, required this.age, required this.email});

  // 从生成的代码获取fromJson和toJson方法
  factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
  Map<String, dynamic> toJson() => _$UserToJson(this);
}

3. 生成序列化代码

在命令行或终端中运行以下命令来生成序列化代码:

flutter pub run build_runner build

这将生成一个名为user.g.dart的文件,其中包含fromJsontoJson方法的实现。

4. 使用序列化代码

现在,你可以在代码中使用这些方法来序列化和反序列化User对象。

import 'dart:convert';
import 'package:flutter/material.dart';
import 'user.dart';  // 导入你的数据模型

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Flexible JSON Serializable Demo')),
        body: Center(
          child: UserDemo(),
        ),
      ),
    );
  }
}

class UserDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // 创建一个User对象
    User user = User(name: 'John Doe', age: 30, email: 'john.doe@example.com');

    // 将User对象序列化为JSON字符串
    String userJson = jsonEncode(user.toJson());
    print('User JSON: $userJson');

    // 将JSON字符串反序列化为User对象
    Map<String, dynamic> userMap = jsonDecode(userJson);
    User deserializedUser = User.fromJson(userMap);
    print('Deserialized User: ${deserializedUser.name}, ${deserializedUser.age}, ${deserializedUser.email}');

    return Text('Check the console for JSON serialization and deserialization output.');
  }
}

总结

通过以上步骤,我们展示了如何在Flutter项目中使用flexible_json_serializable插件来简化JSON的序列化和反序列化过程。主要步骤包括添加依赖、创建数据模型、生成序列化代码以及在实际代码中使用这些序列化方法。希望这个示例对你有帮助!

回到顶部