首页 > 解决方案 > JSON 值无法转换为 System.Boolean。路径:$

问题描述

我正在尝试从 Angular 前端向 asp.net API 服务器发送请求。要提交的表格定义为:

export class SaleToUpdate {
    id: number;
    shipped: boolean;
    shipDate: string;
    returned: boolean;
    returnDate: string;
}

标记和代码

<mat-grid-tile [colspan] = "2" [rowspan] = "1">
        <mat-form-field>
            <input formControlName="shipDate" matInput placeholder="Ship Date">                                         
         </mat-form-field>                
         <div class="radio-group ml-3">
              <mat-radio-group formControlName="shipped" required (ngModelChange)="shipped">           
                    <mat-radio-button value="false">No</mat-radio-button>
                     <mat-radio-button value="true" class="ml-4">Yes</mat-radio-button>
              </mat-radio-group>
         </div>
</mat-grid-tile>  

onSubmit() 方法

onSubmit() {    
   if (this.salesService.saleForm.valid) {
      let sale: SaleToUpdate = this.salesService.saleForm.value;  
      console.log(sale); 

      this.salesService.updateSale(sale.id, sale).subscribe(res => {
         console.log(res);
      }, error => {
        console.log(error);
      });
   } 
}

因此,基本上,我的目的是将表单数据(SaleToUpdate类)发送到后端服务器。

服务器端的 DTO

using System;
namespace API.Dtos
{
   public class SaleUpdateDto
   {      
       public int Id { get; set; }          
       public bool Shipped { get; set; }
       public DateTime ShipDate { get; set; }       
       public bool Returned { get; set; }
       public DateTime ReturnDate { get; set; }
   }
}

从控制台,我得到了错误

JSON 值无法转换为 System.Boolean。路径:$.shipped | 行号:0 | BytePositionInLine: 274." 当从客户端单击提交时。

我注意到表单中shipped&的值是字符串数据类型而不是布尔数据类型returned

任何人都可以帮我解决任何可能的问题吗?

标签: jsonangulartypescripttype-conversionboolean

解决方案


您需要在提交之前格式化表单数据。只需创建一个新的数据对象并将值从字符串解析为布尔值。像这样的东西

onSubmit() {    
    if (this.salesService.saleForm.valid) {
      let sale: SaleToUpdate = this.salesService.saleForm.value;  
      console.log(sale); 
      //this is where to parse object
      var data = {
            id = sale.id,
            shipDate = sale.shipDate,
            shipped = sale.shipped === 'true' ? true: false //this line does the trick
            ....
       }
      this.salesService.updateSale(sale.id, data).subscribe(res => {
        console.log(res);
      }, error => {
        console.log(error);
      });
    } 
  }

希望你觉得这有帮助


推荐阅读