Значение объекта является нулевым после десериализации (Xamarin с SQLite) - PullRequest
1 голос
/ 22 марта 2019

для проекта стажировки Я разрабатываю приложение с Xamarin, которое позволит пользователям сканировать штрих-коды и создавать листы этикеток и покупок.

Чтобы предотвратить потерю отсканированных кодов в случае сбоя и т. Д., Я реализовал SQLite для создания локальной резервной копии, которую мы могли бы восстановить.

Структура выглядит следующим образом: ListOfLabelLines содержит несколько LabelLine, каждый из которых содержит Product и различную другую информацию (такую ​​как упаковка, количество и т. Д.).

ListOfLabelLines.cs:

    [Table("ListOfLabelLines")] // Indique le nom de la table qui sera générée par SQLite
    public class ListOfLabelLines : BaseItem
    {
        private string _name { get; set; }
        [TextBlob("LabelLinesBlob")]
        public ObservableCollection<LabelLine> lines { get; set; }
        [TextBlob("ListBlob")]
        public List<String> TestList { get; set; }

        public string LabelLinesBlob { get; set; } // serialized LabelLines
        public string ListBlob { get; set; } // serialized TestList


        public ListOfLabelLines()
        {

        }

        public ListOfLabelLines(string name)
        {
            this._name = name;
            lines = new ObservableCollection<LabelLine>();
            TestList = new List<String>();
            TestList.Add("Test1");
            TestList.Add("Test2");
        }

        public string Name
        {
            get { return _name; }
            set
            {
                _name = value;
            }
        }
    }

}

Эти объекты ListOfLabelLines содержат ObservableCollection<LabelLine>, который я сериализую, используя свойство TextBlob из SQLite-net-extensions.

Однако, когда я извлекаю ListOfLabelLines, который я сохранил, ObservableCollection отображается как ноль:

Пример нулевых коллекций

Вот методы, которые я использую для хранения объектов в SQlite:

        public void SaveListOfLabelLines(ListOfLabelLines ShelfLabelInstance)
        {
            var query = from label in database.Table<ListOfLabelLines>()
                        where label.Name == ShelfLabelInstance.Name
                        select label;
            var res = query.FirstOrDefault();
            if (res != null)
            {
                database.UpdateWithChildren(ShelfLabelInstance);
                Console.WriteLine("Label " + ShelfLabelInstance.Name + " updated");
            }
            else
            {
                database.InsertWithChildren(ShelfLabelInstance);
                Console.WriteLine("Label " + ShelfLabelInstance.Name + " created");
            }
        }

и для их извлечения:

        public void CheckProductsInLabelLine(string n)
        {
            var query = from LOLL in database.Table<ListOfLabelLines>()
                        where LOLL.Name == n
                        select LOLL;
            ListOfLabelLines res = query.FirstOrDefault();

Строковое свойство, связанное с TextBlob, однако, содержит нужный мне JSON-объект.

Я думал, что ObservableCollection будет доступен при получении объекта в БД, поскольку TextBlob должен сериализовать И десериализовать.

Может ли кто-нибудь помочь?

Большое спасибо!

...