Как я могу инициализировать свойство строки списка, не выбрасывая нулевое исключение? - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть контроллер MVC с jsonResult, который передает корзину сеанса в список SquareS CreateOrderRequestLineItem, но когда я инициализирую список, код выдает нулевое исключение для количества, поскольку это обязательное свойство.Я сопоставил количество и даже сразу установил его в строковое значение. Я установил количество свойств, но пустое исключение выдается до того, как код достигнет сопоставления.Нужно ли устанавливать количество не ноль или 0, если ноль где-то?Вот мой код контроллера.

Сеансовая корзина строит корзину на основе класса продукта и модели продукта с установленными значениями productid, name, number, price и tax.

Как сделатьЯ сопоставляю с новым списком, если он выдает нулевое исключение до того, как мой код может достигнуть сопоставления?

Примечание: я добавил еще один List ItemDetail для передачи данных сеанса после того, как ошибка нулевого исключения уже была выдана, и это нелибо не работает.

Обратите внимание: когда я не использую ссылки на объекты Square и просто использую свои общие списки и возвращаю json, моё количество отображается без нулей для каждого элемента в моей корзине.

public JsonResult CheckoutRequest(string id)
    {
        List<Item> cart = (List<Item>)Session["cart"];
        List<ItemDetails> itemDetails = cart.Select(s => new ItemDetails
        {
            ProductID = Convert.ToInt32(s.Product.ProductID),
            Name = s.Product.Name,
            Price = s.Product.Price,
            Quantity = Convert.ToString(s.Quantity)
        }).ToList();

   var lineItems = itemDetails.Select(s => new CreateOrderRequestLineItem()
        { 
            Quantity = "1",
            Name = s.Name, 
            BasePriceMoney = new Money
            {
                Amount = s.Price,
                Currency = Money.CurrencyEnum.USD,
            },
            CatalogObjectId = Convert.ToString(s.ProductID),
        }).ToList();

          CreateOrderRequest order = new CreateOrderRequest
        {
            ReferenceId = Convert.ToString(Guid.NewGuid()),
            LineItems = lineItems
        };

        //  Configuration.Default.AccessToken = "YOUR_ACCESS_TOKEN";

        var body = new CreateCheckoutRequest
        {
            IdempotencyKey = Convert.ToString(Guid.NewGuid()),
            Order = order,
            AskForShippingAddress = true,
            MerchantSupportEmail = "americanapparelusa@aol.com"
        };

       return Json(new
        {
            locationId,
            body
        }, JsonRequestBehavior.AllowGet);
    }

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Если переменная Session содержит List<Item>, которая потенциально может иметь нулевое значение, следует использовать оператор as, а затем проверять нулевое значение:

var cart = Session["cart"] as List<Item>;
if (cart == null)
{
    // do something
}
else
{
    // use mapping here
}

Однако, если переменная Session содержитДанные JSON, вы можете попробовать преобразовать как string type и десериализовать его, если доступно:

List<Item> cart = new List<Item>();

if (!string.IsNullOrEmpty(Session["cart"] as string))
{
    cart = JsonConvert.DeserializeObject<List<Item>>(Session["cart"].ToString());

    // use mapping here
}
else
{
    // do something else
}
0 голосов
/ 13 ноября 2018

Пожалуйста, измените следующее

List<Item> cart = (List<Item>)Session["cart"];

в

List<Item> cart  = new List<Item>();
if (Session["cart"] != null && Session["cart"].ToString() != null && Session["cart"].ToString() != "")
{                    
   cart = JsonConvert.DeserializeObject<List<Item>>(Session["cart"].ToString());
}
...