You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 13:18:27