我在将数据从jquery ajax帖子发布到asp.net web api方法时遇到问题。日期属性显示在web控制台中,由两个双引号包围,然后重置,布尔属性设置为null。
Javascript:
self.startTime = ko.observable(startTime);
self.startTimeDate = ko.computed({
read: function() {
return moment(self.startTime()).format("MM-DD-YYYY HH:MM:ss");
},
write: function(value){
self.startTime(moment(value).format("MM-DD-YYYY HH:MM:ss"));
}
});
self.endTime = ko.observable(endTime);
self.endTimeDate = ko.computed({
read: function () {
return moment(self.endTime()).format("MM-DD-YYYY HH:MM:ss");
},
write: function (value) {
self.endTime(moment(value).format("MM-DD-YYYY HH:MM:ss"));
}
});
self.includeDeviceAddedToInventory = ko.observable(true);
var model = {
auditLogType: ko.toJSON(self.auditLogType),
id: ko.toJSON(self.auditLogId),
entriesPerPage: ko.toJSON(self.entriesPerPage),
pageNumber: ko.toJSON(self.pageNumber),
startTime: ko.toJSON(self.startTimeDate),
endTime: ko.toJSON(self.endTimeDate),
includeDeviceAddedToInventory: ko.toJSON(self.includeDeviceAddedToInventory)
...
$.post("api/AuditLog", { filterInfo: model })
javascript控制台将对象显示为:
每页条目数:"0",页码:"0",endTime:"10-01-2014 06:10:00",开始时间:"10-01-2014 06:10:00",includeDeviceAddedToInventory:"true"
但是,.net调试器将对象显示为:每页项目数:0,页码:0,endTime:{1/1/0001 12:00:00 AM},startTime:{1/1/0001 12:00:00 AM},空
ASP.NET
public class PostModel
{
public int EntriesPerPage { get; set; }
public int PageNumber { get; set; }
public DateTime StartTime { get; set; }
public DateTime EndTime { get; set; }
public string IncludeDeviceAddedToInventory { get; set; }
}
public HttpResponseMessage Post(PostModel filterInfo)
{
我尝试过使用newtonsoft-webapi属性进行序列化,但没有成功。不过,语法可能不正确。有人能寄样品或帮忙吗?
谢谢。
ko.toJSON
(和底层JSON.stringify
)将用双引号将其括起来(它们将是结果的一部分):
ko.toJSON("aaa") = ""aaa""
当对象的一个成员是ko.toJSON
的结果,并且该对象也被序列化为JSON(当发送到服务器时)时,您也会有这些额外的引号。解决方案很简单,不单独序列化属性,创建具有实际值的对象并发送它,它将作为一个整体进行序列化:
var model = {
auditLogType: self.auditLogType,
id: self.auditLogId,
entriesPerPage: self.entriesPerPage,
pageNumber: self.pageNumber,
startTime: self.startTimeDate,
endTime: self.endTimeDate,
includeDeviceAddedToInventory: self.includeDeviceAddedToInventory
...
$.post("api/AuditLog", { filterInfo: model })