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似乎没有被正确地取消序列化。。。?我不确定这是在哪里发生的,因为我在任何地方都找不到提到它。。。

谢谢。

asp.net Web Api JSON字符串反序列化

javascript中的

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。

相关文章: