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

Flutter中使用SignalR将MsgPack转为指定对象的方法

在Flutter中解析SignalR Msgpack嵌套数组为指定对象结构

你可以通过定义数据模型类+手动解析嵌套数组的方式完成转换,具体步骤如下:

1. 定义对应的数据模型

首先创建两个Dart类,分别对应目标结构的外层对象和内层item对象,注意userID带前导0,需用字符串类型避免丢失格式:

class UserItem {
  final int id;
  final int idReferent;
  final String userID;
  final String firstName;
  final String lastName;

  UserItem({
    required this.id,
    required this.idReferent,
    required this.userID,
    required this.firstName,
    required this.lastName,
  });

  // 从子数组转成UserItem实例
  factory UserItem.fromList(List<dynamic> list) {
    return UserItem(
      id: list[0] as int,
      idReferent: list[1] as int,
      userID: list[2].toString(),
      firstName: list[3] as String,
      lastName: list[4] as String,
    );
  }
}

class ResponseData {
  final int id;
  final UserItem item;

  ResponseData({
    required this.id,
    required this.item,
  });

  // 从外层数组转成ResponseData实例
  factory ResponseData.fromList(List<dynamic> list) {
    return ResponseData(
      id: list[0] as int,
      item: UserItem.fromList(list[1] as List<dynamic>),
    );
  }
}

2. 在SignalR消息回调中解析数据

当通过signalr_netcore接收到Msgpack格式的消息时,直接将回调参数传入模型的fromList方法即可完成转换:

hubConnection.on("你的消息名称", (arguments) {
  // 假设arguments[0]是收到的嵌套数组
  final rawData = arguments[0] as List<dynamic>;
  final responseData = ResponseData.fromList(rawData);
  
  // 直接使用强类型对象的字段
  print(responseData.item.firstName); // 输出Hoàng
});

3. (可选)直接转为Map格式

如果不需要强类型模型,也可以直接将数组转为目标结构的Map:

hubConnection.on("你的消息名称", (arguments) {
  final rawData = arguments[0] as List<dynamic>;
  final result = {
    'id': rawData[0],
    'item': {
      'id': rawData[1][0],
      'idReferent': rawData[1][1],
      'userID': rawData[1][2].toString(),
      'firstName': rawData[1][3],
      'lastName': rawData[1][4],
    }
  };
  
  // 使用转换后的Map结构
});

注意:如果Msgpack解析后的数据类型有差异(比如某些字段是String而非int),需要在转换时做对应的类型适配,避免类型转换异常。

内容的提问来源于stack exchange,提问作者Trần Văn Hiếu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 02:35:19