мне нужно сделать сериализацию и десериализацию. string json = JsonConvert.SerializeObject(phones, Formatting.Indented); // зберігаємо результат серіалізації у файл File.WriteAllText("phones.json", json); Код string json = JsonConvert.SerializeObject(phones, Formatting.Indented); // зберігаємо результат серіалізації у файл File.WriteAllText("phones.json", json); Phone: using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace OOP { public abstract class Phone : IComparable<Phone> { public string name { get; set; } public string brand { get; set; } public int price { get; set; } public Phone(string name, string brand, int price) { this.name = name; this.brand = brand; this.price = price; } int IComparable<Phone>.CompareTo(Phone other) { return other.price.CompareTo(this.price); } /*public int CompareTo(Phone other) { return other.price.CompareTo(this.price); }*/ } } Код using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace OOP { public abstract class Phone : IComparable<Phone> { public string name { get; set; } public string brand { get; set; } public int price { get; set; } public Phone(string name, string brand, int price) { this.name = name; this.brand = brand; this.price = price; } int IComparable<Phone>.CompareTo(Phone other) { return other.price.CompareTo(this.price); } /*public int CompareTo(Phone other) { return other.price.CompareTo(this.price); }*/ } } MobPhone: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace OOP { public class MobPhone : Phone { public string color { get; set; } public int memory { get; set; } public MobPhone(string name, string brand, int price, string color, int memory) : base(name, brand, price) { this.color = color; this.memory = memory; } } } Код using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace OOP { public class MobPhone : Phone { public string color { get; set; } public int memory { get; set; } public MobPhone(string name, string brand, int price, string color, int memory) : base(name, brand, price) { this.color = color; this.memory = memory; } } } RadioPhone: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace OOP { public class RadioPhone : Phone { public double radius { get; set; } public bool hasAutoAnswer { get; set; } public RadioPhone(string name, string brand, int price, double radius, bool hasAutoAnswer) : base(name, brand, price) { this.radius = radius; this.hasAutoAnswer = hasAutoAnswer; } } } Код using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace OOP { public class RadioPhone : Phone { public double radius { get; set; } public bool hasAutoAnswer { get; set; } public RadioPhone(string name, string brand, int price, double radius, bool hasAutoAnswer) : base(name, brand, price) { this.radius = radius; this.hasAutoAnswer = hasAutoAnswer; } } } Создан List<Phone> phones = new List<Phone>(); и туда из файла загружаются телефоны. Как сделать проверку, какой клас нужно выбрать при десериализации?
Nonreyj, вы можете добавить свойство "Type" в классы MobPhone и RadioPhone, которое будет указывать на тип объекта. Затем, при десериализации, вы сможете проверять это свойство и создавать объекты соответствующего типа. Вот пример: 1. Добавьте свойство "Type" в классы MobPhone и RadioPhone: public class MobPhone : Phone { public string Type { get; set; } = "MobPhone"; // Остальные свойства и методы } public class RadioPhone : Phone { public string Type { get; set; } = "RadioPhone"; // Остальные свойства и методы } CSHARP public class MobPhone : Phone { public string Type { get; set; } = "MobPhone"; // Остальные свойства и методы } public class RadioPhone : Phone { public string Type { get; set; } = "RadioPhone"; // Остальные свойства и методы } 2. При десериализации проверяйте свойство "Type" и создавайте объекты соответствующего типа: using Newtonsoft.Json.Linq; // Чтение JSON из файла string json = File.ReadAllText("phones.json"); // Десериализация JSON в массив объектов JObject JArray jsonArray = JArray.Parse(json); // Создание списка объектов Phone List<Phone> phones = new List<Phone>(); foreach (JObject jsonObject in jsonArray) { // Определение типа объекта на основе свойства "Type" string type = jsonObject["Type"].ToString(); if (type == "MobPhone") { MobPhone mobPhone = jsonObject.ToObject<MobPhone>(); phones.Add(mobPhone); } else if (type == "RadioPhone") { RadioPhone radioPhone = jsonObject.ToObject<RadioPhone>(); phones.Add(radioPhone); } } CSHARP using Newtonsoft.Json.Linq; // Чтение JSON из файла string json = File.ReadAllText("phones.json"); // Десериализация JSON в массив объектов JObject JArray jsonArray = JArray.Parse(json); // Создание списка объектов Phone List<Phone> phones = new List<Phone>(); foreach (JObject jsonObject in jsonArray) { // Определение типа объекта на основе свойства "Type" string type = jsonObject["Type"].ToString(); if (type == "MobPhone") { MobPhone mobPhone = jsonObject.ToObject<MobPhone>(); phones.Add(mobPhone); } else if (type == "RadioPhone") { RadioPhone radioPhone = jsonObject.ToObject<RadioPhone>(); phones.Add(radioPhone); } } Теперь ваш список `phones` будет содержать объекты MobPhone и RadioPhone, восстановленные из JSON-файла.