Json 可序列化 - 无效参数(输入):不能为空
Json Serializable - Invalid argument(s) (input): Must not be null
我正在尝试在我的模型 Class 中设置 JSON 值。但它的返回错误为 Invalid argument(s) (input): Must not be null
UserAccount.dart
import 'package:json_annotation/json_annotation.dart';
part 'userAccount.g.dart';
@JsonSerializable(nullable: true,disallowUnrecognizedKeys:true,includeIfNull:true)
class UserAccount{
String id;
String name;
String email;
String profile_pic;
String country;
String phoneNumber;
bool isNewUser;
int role;
int account_status;
String token;
DateTime token_expiry;
String facebook_profile_url;
String google_profile_url;
String twitter_profile_url;
int matchStixx_count;
DateTime created_at;
DateTime updated_at;
UserAccount({
this.id,
this.name,
this.email,
this.profile_pic,
this.country,
this.phoneNumber,
this.isNewUser,
this.role,
this.account_status,
this.token,
this.token_expiry,
this.facebook_profile_url,
this.google_profile_url,
this.twitter_profile_url,
this.matchStixx_count,
this.created_at,
this.updated_at
});
factory UserAccount.fromJson(Map<String,dynamic> json) => _$UserAccountFromJson(json);
Map<String,dynamic> toJson() =>_$UserAccountToJson(this);
}
UserAccount.g.dart
part of 'userAccount.dart';
UserAccount _$UserAccountFromJson(Map<String, dynamic> json) {
return UserAccount(
id: json['_id'] as String,
name: json['name'] as String,
email: json['email'] as String,
profile_pic: json['profile_pic'] as String,
country: json['country'] as String,
phoneNumber: json['phoneNumber'] as String,
isNewUser: json['isNewUser'] as bool,
role: json['role'] as int,
account_status: json['account_status'] as int,
token: json['token'] as String,
token_expiry: DateTime.parse(json['token_expiry'] as String),
facebook_profile_url: json['facebook_profile_url'] as String,
google_profile_url: json['google_profile_url'] as String,
twitter_profile_url: json['twitter_profile_url'] as String,
matchStixx_count: json['matchStixx_count'] as int,
created_at: DateTime.parse(json['created_at'] as String),
updated_at: DateTime.parse(json['updated_at'] as String)
);
}
Map<String, dynamic> _$UserAccountToJson(UserAccount instance) =>
<String, dynamic>{
'id': instance.id,
'name': instance.name,
'email': instance.email,
'profile_pic': instance.profile_pic,
'country': instance.country,
'phoneNumber': instance.phoneNumber,
'isNewUser': instance.isNewUser,
'role': instance.role,
'account_status': instance.account_status,
'token': instance.token,
'token_expiry': instance.token_expiry,
'facebook_profile_url': instance.facebook_profile_url,
'google_profile_url': instance.google_profile_url,
'twitter_profile_url': instance.twitter_profile_url,
'matchStixx_count': instance.matchStixx_count,
'created_at': instance.created_at,
'updated_at': instance.updated_at,
};
JSON数据 - 这个JSON存储在([=25=]responseBody["userData"] )
{_id: 1, name:some name, email: someName@domain.com, profile_pic:
https://xyz/yzz.png, isNewUser: true, role: 1, account_status: 1,
matchStixx_count: 20, created_at: 2020-05-15T06:41:24.528Z, __v: 0}
模型初始化
userAccount = new UserAccount.fromJson(responseBody["userData"]); //geting error here
如果您发布完整的堆栈跟踪会容易得多,因为它包含有关哪些字段为空的信息:
Unhandled exception:
Invalid argument(s) (input): Must not be null
#0 _RegExp.firstMatch (dart:core-patch/regexp_patch.dart:222:24)
#1 DateTime.parse (dart:core/date_time.dart:282:22)
#2 _$UserAccountFromJson (file:///Whosebug.dart:64:30)
#3 new UserAccount.fromJson (file:///Whosebug.dart:47:7)
#4 main (file:///Whosebug.dart:5:15)
#5 _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:301:19)
#6 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:168:12)
代码中有问题的行如下:
token_expiry: DateTime.parse(json['token_expiry'] as String),
因为你的 json 不包含 token_expiry
那么这里的结果将为空。但是由于 DateTime.parse
不接受 null 作为输入,您得到错误 "Must not be null".
要解决此问题,您可以将行更改为如下内容:
token_expiry: json['token_expiry'] == null ? null : DateTime.parse(json['token_expiry'] as String),
这将对字段 updated_at
给出相同的错误,所以你也应该正确地做:
created_at: json['created_at'] == null ? null : DateTime.parse(json['created_at'] as String),
updated_at: json['updated_at'] == null ? null : DateTime.parse(json['updated_at'] as String));
如果路过的人遇到同样的问题,你需要验证你的变量名,就像你有 Map<String, dynamic>
那么你需要验证键名,这就是我遇到的情况,希望这有助于好运
我正在尝试在我的模型 Class 中设置 JSON 值。但它的返回错误为 Invalid argument(s) (input): Must not be null
UserAccount.dart
import 'package:json_annotation/json_annotation.dart';
part 'userAccount.g.dart';
@JsonSerializable(nullable: true,disallowUnrecognizedKeys:true,includeIfNull:true)
class UserAccount{
String id;
String name;
String email;
String profile_pic;
String country;
String phoneNumber;
bool isNewUser;
int role;
int account_status;
String token;
DateTime token_expiry;
String facebook_profile_url;
String google_profile_url;
String twitter_profile_url;
int matchStixx_count;
DateTime created_at;
DateTime updated_at;
UserAccount({
this.id,
this.name,
this.email,
this.profile_pic,
this.country,
this.phoneNumber,
this.isNewUser,
this.role,
this.account_status,
this.token,
this.token_expiry,
this.facebook_profile_url,
this.google_profile_url,
this.twitter_profile_url,
this.matchStixx_count,
this.created_at,
this.updated_at
});
factory UserAccount.fromJson(Map<String,dynamic> json) => _$UserAccountFromJson(json);
Map<String,dynamic> toJson() =>_$UserAccountToJson(this);
}
UserAccount.g.dart
part of 'userAccount.dart';
UserAccount _$UserAccountFromJson(Map<String, dynamic> json) {
return UserAccount(
id: json['_id'] as String,
name: json['name'] as String,
email: json['email'] as String,
profile_pic: json['profile_pic'] as String,
country: json['country'] as String,
phoneNumber: json['phoneNumber'] as String,
isNewUser: json['isNewUser'] as bool,
role: json['role'] as int,
account_status: json['account_status'] as int,
token: json['token'] as String,
token_expiry: DateTime.parse(json['token_expiry'] as String),
facebook_profile_url: json['facebook_profile_url'] as String,
google_profile_url: json['google_profile_url'] as String,
twitter_profile_url: json['twitter_profile_url'] as String,
matchStixx_count: json['matchStixx_count'] as int,
created_at: DateTime.parse(json['created_at'] as String),
updated_at: DateTime.parse(json['updated_at'] as String)
);
}
Map<String, dynamic> _$UserAccountToJson(UserAccount instance) =>
<String, dynamic>{
'id': instance.id,
'name': instance.name,
'email': instance.email,
'profile_pic': instance.profile_pic,
'country': instance.country,
'phoneNumber': instance.phoneNumber,
'isNewUser': instance.isNewUser,
'role': instance.role,
'account_status': instance.account_status,
'token': instance.token,
'token_expiry': instance.token_expiry,
'facebook_profile_url': instance.facebook_profile_url,
'google_profile_url': instance.google_profile_url,
'twitter_profile_url': instance.twitter_profile_url,
'matchStixx_count': instance.matchStixx_count,
'created_at': instance.created_at,
'updated_at': instance.updated_at,
};
JSON数据 - 这个JSON存储在([=25=]responseBody["userData"] )
{_id: 1, name:some name, email: someName@domain.com, profile_pic: https://xyz/yzz.png, isNewUser: true, role: 1, account_status: 1, matchStixx_count: 20, created_at: 2020-05-15T06:41:24.528Z, __v: 0}
模型初始化
userAccount = new UserAccount.fromJson(responseBody["userData"]); //geting error here
如果您发布完整的堆栈跟踪会容易得多,因为它包含有关哪些字段为空的信息:
Unhandled exception:
Invalid argument(s) (input): Must not be null
#0 _RegExp.firstMatch (dart:core-patch/regexp_patch.dart:222:24)
#1 DateTime.parse (dart:core/date_time.dart:282:22)
#2 _$UserAccountFromJson (file:///Whosebug.dart:64:30)
#3 new UserAccount.fromJson (file:///Whosebug.dart:47:7)
#4 main (file:///Whosebug.dart:5:15)
#5 _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:301:19)
#6 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:168:12)
代码中有问题的行如下:
token_expiry: DateTime.parse(json['token_expiry'] as String),
因为你的 json 不包含 token_expiry
那么这里的结果将为空。但是由于 DateTime.parse
不接受 null 作为输入,您得到错误 "Must not be null".
要解决此问题,您可以将行更改为如下内容:
token_expiry: json['token_expiry'] == null ? null : DateTime.parse(json['token_expiry'] as String),
这将对字段 updated_at
给出相同的错误,所以你也应该正确地做:
created_at: json['created_at'] == null ? null : DateTime.parse(json['created_at'] as String),
updated_at: json['updated_at'] == null ? null : DateTime.parse(json['updated_at'] as String));
如果路过的人遇到同样的问题,你需要验证你的变量名,就像你有 Map<String, dynamic>
那么你需要验证键名,这就是我遇到的情况,希望这有助于好运