【问题标题】:build_runner is not generating correct toJson methodsbuild_runner 没有生成正确的 toJson 方法
【发布时间】:2022-01-06 07:48:23
【问题描述】:

test.dart文件:

import 'package:json_annotation/json_annotation.dart';

import 'foo.dart';

part 'test.g.dart';

@JsonSerializable()
class Test {
  Test(this.foo);

  factory Test.fromJson(Map<String, dynamic> json) => _$TestFromJson(json);
  Map<String, dynamic> toJson() => _$TestToJson(this);

  final Foo? foo;
}

test.g.dart 类

// GENERATED CODE - DO NOT MODIFY BY HAND

part of 'test.dart';

// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************

Test _$TestFromJson(Map<String, dynamic> json) {
  return Test(
    json['foo'] == null
        ? null
        : Foo.fromJson(json['foo'] as Map<String, dynamic>),
  );
}

Map<String, dynamic> _$TestToJson(Test instance) => <String, dynamic>{
      'foo': instance.foo,
    };

几个月前,这些类是用另一个_$TestToJson 生成的。每个自定义类字段都像这样:

'foo': instance.foo?.toJson(),

现在?.toJson() 不见了。结果是带有来自自定义类的对象的 Map。但是我需要一棵带有地图地图的树.....因为当我尝试使用 fromJson 时,该树不适合重新转换。

这里是 foo.dart

import 'package:json_annotation/json_annotation.dart';

part 'foo.g.dart';

@JsonSerializable()
class Foo {
  Foo();

  factory Foo.fromJson(Map<String, dynamic> json) => _$FooFromJson(json);
  Map<String, dynamic> toJson() => _$FooToJson(this);
}
 

【问题讨论】:

    标签: json flutter serialization


    【解决方案1】:
    explicitToJson
    

    您可以像这样使用特定的类对其进行自定义:

    @JsonSerializable(explicitToJson: true)
    class Test {
      Test(this.foo);
    
      factory Test.fromJson(Map<String, dynamic> json) => _$TestFromJson(json);
      Map<String, dynamic> toJson() => _$TestToJson(this);
    
      final Foo? foo;
    }
    

    【讨论】:

      【解决方案2】:

      build.yaml 丢失。

      这里是我的 build.yaml

      targets:
        $default:
          builders:
            json_serializable:
              options:
                explicit_to_json: true
      

      explicit_to_json 默认为 false

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-30
        • 2023-02-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-26
        • 1970-01-01
        • 2012-01-09
        相关资源
        最近更新 更多