JSON десериализация не работает в веб-API - PullRequest
0 голосов
/ 28 марта 2020

Я хочу десериализовать запрос json, но он не работает в Web API. Мой код ниже для десериализации. Подскажите, пожалуйста, что я делаю не так?

[HttpPost]
public HttpResponseMessage AddOrder(string username , string password, JObject jsonResult)
{
    try
    {
        AuthRepository _auth = new AuthRepository();

        OrderDTO.RootObject O = new OrderDTO.RootObject();
        O = JsonConvert.DeserializeObject<OrderDTO.RootObject>(jsonResult.ToString());
    }
    catch (Exception ex)
    {
        return Request.CreateErrorResponse(System.Net.HttpStatusCode.BadRequest, ex);
    } 
}

Это JSON, которое будет получено нашим методом:

{
  "token": "D8xJD2CI6PrkB3q5gnlT",
  "shipment": {
    "hawb": "0800780108",
    "service_level": "CURBSIDE",
    "status": "NEW",
    "description": "bundle of things",
    "service_level_code": "CB",
    "delivery_date": "8/22/2019 5:01:00 PM",
    "delivery2_date": "8/22/2019 12:00:00 AM",
    "origin": {
      "name": "ESTES EXPRESS BOSTON-080",
      "nbr": "0800780108",
      "phone": "508-513-0120",
      "email": "",
      "address1": "215 BODWELL ST",
      "city": "AVON",
      "state": "MA",
      "zip_postal_code": "02322",
      "country": "US"
    },
    "dest": {
      "name": "JOSEPH VINOGRAD",
      "nbr": "",
      "phone": "",
      "email": "",
      "address1": "14 CORTLAND DR",
      "city": "Sharon",
      "state": "MA",
      "zip_postal_code": "02067",
      "country": "US"
    },
    "piece_count": "2",
    "dangerous_goods": "0",
    "weight": 190
  }
}

Код для класса

public class OrderDTO
{
        public class Origin
        {
            public string name { get; set; }
            public string nbr { get; set; }
            public string phone { get; set; }
            public string email { get; set; }
            public string address1 { get; set; }
            public string city { get; set; }
            public string state { get; set; }
            public string zip_postal_code { get; set; }
            public string country { get; set; }
        }

        public class Dest
        {
            public string name { get; set; }
            public string nbr { get; set; }
            public string phone { get; set; }
            public string email { get; set; }
            public string address1 { get; set; }
            public string city { get; set; }
            public string state { get; set; }
            public string zip_postal_code { get; set; }
            public string country { get; set; }
        }

        public class Shipment
        {
            public string hawb { get; set; }
            public string service_level { get; set; }
            public string status { get; set; }
            public string description { get; set; }
            public string service_level_code { get; set; }
            public string delivery_date { get; set; }
            public string delivery2_date { get; set; }
            public Origin origin { get; set; }
            public Dest dest { get; set; }
            public string piece_count { get; set; }
            public string dangerous_goods { get; set; }
            public double weight { get; set; }
        }

        public class RootObject
        {
            public string token { get; set; }
            public Shipment shipment { get; set; }
        }
}

1 Ответ

0 голосов
/ 28 марта 2020

Вы можете добавить username и password к своему классу OrderDTO (или другому классу, содержащему эти три объекта), а затем изменить определение действия следующим образом: public HttpResponseMessage AddOrder(OrderDRO input).

Тогда вы не сможете нужно использовать json сериализацию и легко сделать свою логи c.

...