Список не заполняется Json deserialize?C # - PullRequest
0 голосов
/ 21 января 2019

У меня проблемы с десериализацией файла json.Объект json имеет следующую упрощенную структуру:

    {"date":"2015-11-11",
     "retailer_id":"CLD001",
     "orders":[{
      "products": 
[{
"product_id":"53743443003",
"quantity":4,"
unit_price":42.71}],
"value":170.84,
"customer":{"id":58}}]} 

Эта структура указала мне, что верхний класс равен

[Table]
public class RetailOrders : INotifyPropertyChanged, INotifyPropertyChanging
{
    private List<OrderItems> oi;
    private string retailer_id;
    private DateTime date;

    public List<OrderItems> OrderItems
    {
        get { return oi; }
        set { oi = value; }
    }
    public string Retailer_id
    {
        get { return retailer_id; }
        set { retailer_id = value; }
    }
    public DateTime Date
    {
        get { return date; }
        set { date = value; }
    }



    private void NotifyPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this,
                          new PropertyChangedEventArgs(propertyName));
        }
    }

    private void NotifyPropertyChanging(string propertyName)
    {
        if (PropertyChanging != null)
        {
            PropertyChanging(this, new PropertyChangingEventArgs(propertyName));
        }
    }


    public event PropertyChangedEventHandler PropertyChanged;
    public event PropertyChangingEventHandler PropertyChanging;
}

. Как вы можете видеть, заказы принимают списокзаказанный с переменной id, количеством и общей стоимостью

  [Table]
    public class ProductsOrdered: INotifyPropertyChanged, INotifyPropertyChanging
    {
        private string productID;
        private int quantity;
        private double unit_price;

        public string ProductID
        {
            get { return productID; }
            set { productID = value; }
        }
        public int Quantity
        {
            get { return quantity; }
            set { quantity = value; }
        }
        public double UnitPrice
        {
            get { return unit_price; }
            set { unit_price = value; }
        }



        private void NotifyPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this,
                              new PropertyChangedEventArgs(propertyName));
            }
        }

        private void NotifyPropertyChanging(string propertyName)
        {
            if (PropertyChanging != null)
            {
                PropertyChanging(this, new PropertyChangingEventArgs(propertyName));
            }
        }

наконец, orderItems содержит список заказов, за которыми следует общая цена и связанный клиент

  [Table]
    public class OrderItems : INotifyPropertyChanged, INotifyPropertyChanging
    {
        private List<ProductsOrdered> po = new List<ProductsOrdered>();
        private double TotalPrice;
        private int customer_id;

        public List<ProductsOrdered> Productsordered
        {
            get { return po; }
            set { po = value; }
        }
        public double totalprice
        {
            get { return TotalPrice; }
            set { TotalPrice = value; }
        }
        public int customerid
        {
            get { return customer_id; }
            set { customer_id = value; }
        }



        private void NotifyPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this,
                              new PropertyChangedEventArgs(propertyName));
            }
        }

        private void NotifyPropertyChanging(string propertyName)
        {
            if (PropertyChanging != null)
            {
                PropertyChanging(this, new PropertyChangingEventArgs(propertyName));
            }
        }


        public event PropertyChangedEventHandler PropertyChanged;
        public event PropertyChangingEventHandler PropertyChanging;
    }

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

1 Ответ

0 голосов
/ 21 января 2019

Ваши имена свойств не соответствуют указанному вами JSON.В частности, в вашем JSON есть массив orders, но в вашем классе C # это свойство OrderItems.

. Вы можете аннотировать свойство следующим образом:

[JsonProperty(PropertyName = "orders")]
public List<OrderItems> OrderItems { get; set; }

У меня нетработал всюду по вашей иерархии, но любые другие нулевые поля, вероятно, будут вызваны аналогичным несоответствием.

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

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