基于C#模型创建Flutter API交互模型,请求正确性校验
Flutter模型校验与序列化补充建议
你当前编写的AddressModel仅实现了继承父类的构造函数,完全缺少API调用必需的JSON序列化/反序列化方法,无法直接用于和后端的交互。结合你提供的C#模型结构(Address类包含AddressNumber、AddressText字段,以及CountryObj、ProvinceObj、DistrictObj、WardObj四个关联对象,每个关联对象包含ID和Name属性),修正后的模型代码如下:
import 'dart:convert'; import 'package:kool_selling/models/kool_m_base_models.dart'; class AddressModel extends AddressCustom { AddressModel({ required super.addressNumber, required super.addressText, required super.countryObj, required super.provinceObj, required super.districtObj, required super.wardObj, }); // 从JSON字符串解析为模型对象 factory AddressModel.fromJson(Map<String, dynamic> json) { return AddressModel( addressNumber: json['AddressNumber'] as String, addressText: json['AddressText'] as String, countryObj: CountryCustom.fromJson(json['CountryObj'] as Map<String, dynamic>), provinceObj: ProvinceCustom.fromJson(json['ProvinceObj'] as Map<String, dynamic>), districtObj: DistrictCustom.fromJson(json['DistrictObj'] as Map<String, dynamic>), wardObj: WardCustom.fromJson(json['WardObj'] as Map<String, dynamic>), ); } // 将模型对象转换为JSON格式 @override Map<String, dynamic> toJson() { return { 'AddressNumber': addressNumber, 'AddressText': addressText, 'CountryObj': countryObj.toJson(), 'ProvinceObj': provinceObj.toJson(), 'DistrictObj': districtObj.toJson(), 'WardObj': wardObj.toJson(), }; } }
关键注意事项
- 字段键名必须和后端C#接口返回的JSON字段严格匹配(比如C#里的
AddressNumber,不能改成小驼峰的addressNumber,除非后端配置了驼峰序列化) - 必须确保
CountryCustom、ProvinceCustom、DistrictCustom、WardCustom这四个类也实现了fromJson和toJson方法,否则会出现序列化失败的错误 - 如果父类
AddressCustom已经实现了部分序列化逻辑,可以直接复用,减少重复代码
内容的提问来源于stack exchange,提问作者Ken
相关产品推荐
相关产品推荐

