Skip to content

Get null when using generic #248

Closed
Closed
@pcqpcq

Description

@pcqpcq

my json data:

{
    "resultCode": "0",
    "resultMessage": "success",
    "data": {
        "result": 5
    }
}

my base_response.dart and its part

import 'package:json_annotation/json_annotation.dart';

part 'base_response.g.dart';

@JsonSerializable()
class BaseResponse<T> extends Object with _$BaseResponseSerializerMixin {
  String resultCode;
  String resultMessage;
  @JsonKey(fromJson: _dataFromJson, toJson: _dataToJson)
  T data;

  BaseResponse(this.resultCode, this.resultMessage, this.data);

  factory BaseResponse.fromJson(Map<String, dynamic> json) => _$BaseResponseFromJson<T>(json);

}

T _dataFromJson<T>(Map<String, dynamic> input) => 
    input['value'] as T;

Map<String, dynamic> _dataToJson<T>(T input) =>
    {'value': input};
part of 'base_response.dart';

BaseResponse<T> _$BaseResponseFromJson<T>(Map<String, dynamic> json) {
  return new BaseResponse<T>(
      json['resultCode'] as String,
      json['resultMessage'] as String,
      json['data'] == null
          ? null
          : _dataFromJson(json['data'] as Map<String, dynamic>));
}

abstract class _$BaseResponseSerializerMixin<T> {
  String get resultCode;
  String get resultMessage;
  T get data;
  Map<String, dynamic> toJson() => <String, dynamic>{
        'resultCode': resultCode,
        'resultMessage': resultMessage,
        'data': data == null ? null : _dataToJson(data)
      };
}

my data class and its part

import 'package:json_annotation/json_annotation.dart';

part 'content.g.dart';

@JsonSerializable()
class Content extends Object with _$ContentSerializerMixin {
  int result;

  Content(this.result);

  factory Content.fromJson(Map<String, dynamic> json) => _$ContentFromJson(json);
}
part of 'content.dart';

Content _$ContentFromJson(Map<String, dynamic> json) {
  return new Content(json['result'] as int);
}

abstract class _$ContentSerializerMixin {
  int get result;
  Map<String, dynamic> toJson() => <String, dynamic>{'result': result};
}

then, when I use it like this:

var out = new BaseResponse<Content>.fromJson(jsonDecode(json));

print(out.resultCode);  // <---- it's 0
print(out.resultMessage);  // <---- it's success
print(out.data);  // <---- it's null

why out.data is null? Am I missing something?

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions