parse method

  1. @override
T parse(
  1. dynamic rawData
)
override

解析数据 rawData 原始响应数据 返回解析后的目标数据

如果解析失败,应抛出 ParserException

Implementation

@override
T parse(dynamic rawData) {
  if (rawData is! Map<String, dynamic>) {
    throw ParserException(
      '响应数据格式错误,期望 Map 类型,实际类型: ${rawData.runtimeType}',
      rawData: rawData,
    );
  }

  // 验证成功标志(如果需要)
  if (validateSuccess) {
    final success = rawData['success'];
    if (success != true) {
      final error = rawData['error'] ?? '未知错误';
      throw ParserException('请求失败: $error', rawData: rawData);
    }
  }

  // 提取结果字段
  if (!rawData.containsKey(fieldName)) {
    throw ParserException('响应中不存在字段: $fieldName', rawData: rawData);
  }

  try {
    return rawData[fieldName] as T;
  } catch (e) {
    throw ParserException(
      '无法将字段 $fieldName 转换为目标类型 $T',
      rawData: rawData[fieldName],
      originalError: e,
    );
  }
}