Flutter-将复杂的JSON发送到服务器

时间:2019-11-22 20:56:27

标签: json flutter dart

我正在开发一个购物应用程序,需要将用户信息以及购物车中的项目列表发送到服务器。我整天都在互联网上搜索,找不到适合我的解决方案。我必须提交的JSON如下所示。

{
"areaId": 9,
"userId": 4,
"totalOrder": [{
    "categoryId": "1",
    "itemId": "1",
    "priceOfItem": 28,
    "serviceTypeId": 1,
    "title": "Shalwar Kameez"
}, {
    "categoryId": "1",
    "itemId": "2",
    "priceOfItem": 28,
    "serviceTypeId": 1,
    "title": "Shalwar Kameez Ladies (2Pcs)"
}, {
    "categoryId": "1",
    "itemId": "2",
    "priceOfItem": 28,
    "serviceTypeId": 1,
    "title": "Shalwar Kameez Ladies (2Pcs)"
 }]
}

下面是我向服务器发送数据的方式。

 Future<String> saveOrder() async {
   var map = new Map<String, dynamic>();

   map["userId"] = await SharedPreferencesUser.getUserId();
   map["areaId"] = await SharedPreferencesUser.getAreaId();
   map["totalOrder"] = cart.items; // this is list of items in cart List<CartItem> 

   var res = await http.post(
   Uri.encodeFull(Url.url + Apis.saveOrder),
   headers: {"Accept": "application/json"},
   body: json.encode(map), //encoding to json
   );

  return res.body;
}

我收到的异常是 “未处理的异常:将对象转换为可编码的对象失败:'CartItem'的实例”

CartItem类如下

class CartItem {
  String id;
  String categoryId;
  String itemName;
  int piece;
  int price;
  int quantity;
  String serviceType;
  String serviceId;
  String defalutCategory;

  CartItem(this.id, this.categoryId, this.itemName, this.piece, this.price,
      this.quantity, {this.serviceType, this.serviceId, this.defalutCategory});
}

请帮助我解决此问题。谢谢

1 个答案:

答案 0 :(得分:2)

您正在尝试对包含对象的列表进行编码。在对象上调用encode时,它将尝试调用方法toJson()。如果未实现此方法,则json.encode将失败。

尝试将其添加到您的CartItem类中:

Map<String, dynamic> toJson() =>  {
    'id': id,
    'categoryId': categoryId,
    'itemName': itemName,
    'piece': piece,
    'price': price,
    'quantity': quantity,
    'serviceType': serviceType,
    'serviceId': serviceId,
    'defaultCategory': defaultCategory,
  };

您也拼写错了defaultCategory,所以我在defalutCategory的答案中将其更改了