Установка значения модели из вложенного объекта JSON - PullRequest
0 голосов
/ 21 октября 2019

Я получаю меню продуктов, которые возвращаются в виде строки JSON. Исходя из этих данных, я пытаюсь заполнить список моделей продуктов и отправить их в мой вид для отображения в качестве типа живого меню. мой код, используемый для получения данных, выглядит следующим образом;за исключением отправляемых заголовков, поскольку я уже получаю все правильно;

var response = await httpClient.SendAsync(request);
                var responseContent = response.Content.ReadAsStringAsync().Result;

                List<MenuItem> Products = new List<MenuItem>();

                JObject jsonObject = JObject.Parse(responseContent);
                JToken item = jsonObject["data"];

                foreach (var menuitem in item)
                {
                    MenuItem product = new MenuItem(menuitem);
                    Products.Add(product);                        
                }

моя модель MenuItem получает каждый отдельный элемент и пытается установить значения модели;

 public class MenuItem
{
    public MenuItem(JToken product)
    {
        Id = (Int32)product["id"];
        Name = (string)product["name"];
        Item_Number = (string)product["item_number"];
        Description = (string)product["description"];           


        Pricing.Default_Price = (string)product["pricing"]["default_price"];
        Pricing.Pricing_Group_Id = (Int32)product["pricing"]["pricing_group_id"];

    }

Существует многобольше сущности для модели, но это должно быть все, что нужно

        public Pricing Pricing { get; set; }

}
public class Pricing
{
    public string Default_Price { get; set; }
    public Int32 Pricing_Group_Id { get; set; }
    public string Pricing_Group_Name { get; set; }
    public WeightPrices Weight_Prices { get; set; }
}
public class WeightPrices
{
    public Int32 Pricing_Weight_Id { get; set; }
    public String Name { get; set; }
    public float Default_Price { get; set; }
}

Проблема, с которой я сталкиваюсь, заключается в попытках установить значения цены из более глубокого дочернего элемента.

Pricing.Default_Price = (string)product["pricing"]["default_price"];
    Pricing.Pricing_Group_Id = (Int32)product["pricing"]["pricing_group_id"];

Мой код выдается как «Ссылка на объект не установлена ​​на экземпляр объекта». когда он попадает в эти строки. При добавлении часов в VS2017 значение верное, но я все равно получаю эту ошибку. Формат строки JSON:

{"data": [
{
"id": 2148487,
"name": "3.5 grams of Blue Dream",
"item_number": "8AEO00000001",
"description": "",
"pricing": {
  "default_price": "20.00",
  "pricing_group_id": 5908,
  "weight_prices": [
    {
      "pricing_weight_id": 21504,
      "default_price": "12.00",
      "name": ".5g",
      "uom": "GR",
      "weight": 0.5
    },
    {
      "pricing_weight_id": 21505,
      "default_price": "20.00",
      "name": "1g",
      "uom": "GR",
      "weight": 1
    }
  ],
  "pricing_group_name": "Top Shelf"
}

Буду признателен за любую помощь, я еще не начал с ценами на вес, это следующий шаг.

1 Ответ

2 голосов
/ 21 октября 2019

Свойство Pricing никогда не создается, поэтому оно равно нулю всякий раз, когда вы пытаетесь установить значение свойства для него.

Перед тем, как установить Default_Price, установите Pricing = new Pricing()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...