如何在服务器端反序列化JSON字符串

时间:2018-05-22 20:17:55

标签: c# json angular json-deserialization

在Angular,mvc项目中,我使用JSON.stringify将字符串格式的日期传递给服务器端。在我的服务器端,我得到了#34; \" 05/10/2018 \""。我尝试了各种方法将其转换为DateTime但是没有成功。我想我需要反序列化字符串,转换为日期将其传递给sql,但无法弄清楚如何?我浏览了找到答案,但没有成功。如果我需要安装nuget包,请告诉我。 这是客户端服务类:

private GetLOBUrl = 'http://localhost:63213/Vto/GetLOB';
getLOBs(action: string = null, data?: VTO): Observable<VTO[]> {
    return this.http.post<VTO[]>(this.GetLOBUrl + `/?ReportDate=${JSON.stringify(action)}`,null)
        .catch(this.errorHandler);
}
   errorHandler(error: HttpErrorResponse) {
    return Observable.throw(error.message || "Server Error");
}

在服务器端,我在将reportDate转换为字符串/日期类型时遇到问题。

 public static IEnumerable<DTO.DropDownItem> SelectLOB(string reportDate)
    {
   //reportDate comes in "\"05/10/2018\"" format. Here I need to convert reportDate to string 

        DateTime rDate = DateTime.Parse(reportDate);
        string query = @"SELECT Id, Description 
                      FROM TABLE 
                      WHERE StartDate = @reportDate AND StopDate is NULL";
        IEnumerable<DTO.DropDownItem> items = new List<DTO.DropDownItem>(0);
        var p = new DynamicParameters();
        p.Add("@reportDate", reportDate);
        using (SqlConnection con = Connection.GetConnection())
        {
            items = con.Query<DTO.DropDownItem>(query, param: p, commandType: CommandType.Text);
        }
        return items;
    }

2 个答案:

答案 0 :(得分:2)

我想你想做

var dt= (DateTime)JToken.Parse("\"05/10/2018\"");

答案 1 :(得分:0)

你应该如上所述使用JToken库来解析你的json,但是我可以在使用下面的代码解析为某个日期之前删除引号,如果你想做的话。

  string val = "\"05/10/2018\"".Replace("\"","");
  DateTime rDate = DateTime.Parse(val);