asp.net Web Api JSON字符串反序列化
本文关键字:字符串 反序列化 JSON Api net Web asp | 更新日期: 2023-09-27 17:58:05
我遵循本教程创建了一个Restful web api服务。一切似乎都很好,我可以通过从正确的url请求JSON格式的所有预订。我的问题是http POST。
我的Javascript是:
var url = 'http://localhost:9077/api/bookings';
....
var newEvent = [];
newEvent.EventDateTime = // (now);
newEvent.Name = "MyFirstBooking";
function btnSubmit_Click()
{
alert("Submit clicked: " + newEvent.Name + "'n" + newEvent.EventDateTime);
$.ajax({
type: "POST",
url: url,
data: JSON.stringify( { Bookings: newEvent }),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data) { alert(data); }
});
}
警报显示正确的日期和正确的名称。当我点击Submit并检查fiddler时,JSON的格式似乎是正确的:
{"Bookings":[{"Name":"MyFirstBooking","EventDateTime":"2014-04-14T13:45:00.000Z"}]}
我的观点是预订.cs:
public class Bookings
{
public int ID { get; set; }
public string Name { get; set; }
public DateTime BookingDateTime { get; set; }
public DateTime EventDateTime { get; set; }
public int Duration { get; set; }
public int UserID { get; set; }
}
在我的BookingsController中,我有:
public HttpResponseMessage PostBooking(Bookings item)
{
// Implementation
}
然而,当我在PostBooking后放置断点时,项。EventDateTime为{01/01/0001 00:00:00},Name为null。JSON似乎没有被正确地取消序列化。。。?我不确定这是在哪里发生的,因为我在任何地方都找不到提到它。。。
谢谢。
ahhh日期。它们不好玩吗?您很可能需要用javascript进行转换,或者看看这个堆栈溢出问题,才能在您的api中实现自定义日期处理程序:
ASP.NET Web API JSON中的日期格式未成功序列化
编辑:我还注意到您的JSON对象是一个数组。您需要更改您的签名才能获取数组:
public HttpResponseMessage PostBooking(IEnumerable<Bookings> items)
{
// Implementation
}
再次编辑:
转念一想,我认为你的活动不需要是一个数组。我想你想这样做:
var newEvent ={};
这将把newEvent初始化为对象而不是数组。然后你可以保留你的签名。你可能需要更改你的参数名称,就像tomasofen在他的回答中提到的那样。
再次编辑:
进一步思考:您不需要用{"Bookings":newEvent}来root对象,只需执行以下操作即可:
$.ajax({
type: "POST",
url: url,
data: JSON.stringify(newEvent),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data) { alert(data); }
});
您正在将contentType设置为json。这告诉您的web应用程序内容应该是json,然后由服务器处理和转换。通过对其进行字符串化,可以将内容转换为字符串,从而更改contentType。
尝试在服务器方法中使用与Json参数名称相同的变量名称:
对于服务器端:
public HttpResponseMessage PostBooking(Bookings item)
{
// Implementation
}
对于客户端(只需将"项"更改为参数的名称):
{"item":[{"Name":"MyFirstBooking","EventDateTime":"2014-04-14T13:45:00.000Z"}]}
我对此有意见,也许你就是这样。告诉我们尝试其他方法是否有效。
还要检查服务器中的对象Bookings是否以相同的方式写入了成员Name和EventDateTime。