Подтвердить что ты не робот

Как получить данные JSON на WebAPI-сервере С#?

Как получить данные JSON на моем сервере WebAPI на С#?

У меня есть следующий JSON, отправленный из моего интерфейса JavaScript.

{
    "User_Id": 1,
    "TotalPrice": 35,
    "DeliveryAddress": "At my house",
    "CartItems": [
        {
            "Id": 1009,
            "Name": "Superman juni 2014",
            "Quantity": 1,
            "Price": 35
        }
    ]
}

У меня есть следующие классы:

public class PurchaseOrder
    {        
        public List<CartItem> CartItems { get; set; }
        public string DeliveryAddress { get; set; }
        public int TotalPrice { get; set; }
        public int User_Id { get; set; }
    }
public class CartItem
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Quantity { get; set; }
        public int Price { get; set; }
    }

И мой метод WebAPI:

[System.Web.Mvc.HttpPost]
        public bool AddOrder(PurchaseOrder order)
        {
            // Here I will do something

            return true;
        } 

Я получаю "null" в качестве результата для моего объекта "OrderOrder order". Может ли проблема заключаться в том, что я использую [System.Web.Mvc.HttpPost]? Я также попробовал [System.Web.Http.HttpPost], но получаю тот же результат. // Мартин

4b9b3361

Ответ 1

Content-Type вашего запроса должно быть "application/json"

Если вы разместите свой json в теле запроса, чем измените подпись метода на

[HttpPost]
public bool AddOrder([FromBody] PurchaseOrder order)
{
}

Ответ 2

Проблема решена, это было "приложение/json", которое отсутствовало. Для других людей, имеющих ту же проблему, вот моя функция. Я использую Knockout.js, следовательно, "self" -слово.

self.makePurchase = function () {
            var tempUserId = self.orderUserId();
            var tempCartPrice = self.ShoppingCartPrice();
            var tempAddress = self.orderAddress();
            var tempCart = self.ShoppingCart();

            var orderSave = new PurchaseSave(tempUserId, tempCartPrice, tempAddress, tempCart);
            var myData = ko.toJSON(orderSave);
            console.log(myData);

            $.ajax({
                type: "POST",
                async: false,
                url: '/Products/AddOrder',
                contentType: "application/json", // Thank you Stackoverflow!!!
                dataType: "json",
                traditional: true,
                data: myData,
                error: function (xhr, textStatus, errorThrown) {
                    console.log(xhr.responseText);
                    console.log("Inside the error method");

                },
                success: function (data) {
                    console.log("Inside the success method");

                }
            });
        }

Ответ 4

Попробуйте использовать пакет Newtonsoft.Json от NuGet. Они имеют функции для сериализации и десериализации любой строки в Json. Также попробуйте использовать динамические переменные типа. Помогает десериализации.