json - 键入'_InternalLinkedHashMap' 不是类型 'String' 的子类型
问题描述
json
在存储到本地数据库之前将字符串转换为对象的正确方法是什么?
这是输出i['created_by_user']
:
{id: 3, name: A}
我试图将其转换为CreatedBy
对象
CreatedBy.fromJson(jsonDecode(i['created_by_user'])),
由...制作
@JsonSerializable()
class CreatedBy{
var name;
var id;
CreatedBy();
factory CreatedBy.fromJson(Map<String, dynamic> json) =>
_$CreatedByFromJson(json);
Map<String, dynamic> toJson() => _$CreatedByToJson(this);
}
这是我的本地表格列
TextColumn get createdByUser =>
text().map(const CreatedBySqlConverter()).nullable()();
class CreatedBySqlConverter extends TypeConverter<CreatedBy, String> {
const CreatedBySqlConverter();
CreatedBy mapToDart(String fromDb) {
if (fromDb == null) return null;
return CreatedBy.fromJson(json.decode(fromDb));
}
String mapToSql(CreatedBy createdBy) => json.encode(createdBy.toJson());
}
错误
type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'String'
解决方案
如果在 fromJson() 你需要一个 Map<String, dynamic> 和输出
i['created_by_user'] //is a Map<String, dynamic>
我认为你不必解码它。
我建议你更换
CreatedBy.fromJson(jsonDecode(i['created_by_user'])),
和
CreatedBy.fromJson(i['created_by_user']),
推荐阅读
- python - Altair 渲染器静默失败
- .net - 无法在 PowerShell 中将字符串转换为 int
- azure-blob-storage - 使用 SQL 行中的文件名和数据创建 Blob
- python-3.x - 如何在 Python 中使用 storetext 命令
- autodesk-designautomation - Revit 的 Design Automation API (Beta)v3 是否支持旧版本的 Revit 文件,例如 2015/2016/2017?
- mysql - MySQL IF 语句然后 COUNT 列中的值
- postgresql-10 - Postgresql 负载测试场景
- php - Laravel Passport - /oauth/token 生成无效令牌
- reactjs - 反应钩子 useCallback 与循环内的参数
- r - 在数据框中创建新列时,用内置函数替换 R 中的几个 if else 语句