/// <summary> /// Десериализация /// </summary> /// <param name="s"></param> public void Deserialize(Stream stream) { using (StreamReader streamReader = new StreamReader(stream)) { ListRandom listRandom = new ListRandom(); string readedLine; List <Tuple <int, ListNode> > randomIndexList = new List <Tuple <int, ListNode> >(); while ((readedLine = streamReader.ReadLine()) != null) { var a = readedLine.Split('~'); if (a.Length != 2) { throw new Exception("Файл повреждён"); } randomIndexList.Add(new Tuple <int, ListNode>(Convert.ToInt32(a[0]), listRandom.AddNode(a[1]))); } foreach (var item in randomIndexList) { if (item.Item1 > -1) { item.Item2.Random = randomIndexList[item.Item1].Item2; } } this.Head = listRandom.Head; this.Tail = listRandom.Tail; this.Count = listRandom.Count; } }
private static void Main(string[] args) { try { ListRandom listRandom = new ListRandom(); listRandom.AddNode("Первый"); listRandom.AddNode("Второй"); listRandom.AddNode("Третий"); listRandom.AddNode("Чётвёртый"); listRandom.AddNode("Пятый"); listRandom.AddNode("Шестой"); listRandom.AddNode("Седьмой"); listRandom.AddNode("Восьмой"); listRandom.AddNodeFirst("Нулевой"); listRandom.SetRandomListNode(); foreach (ListNode item in listRandom) { Console.WriteLine(item.Data + " " + item.Random.Data); } using (FileStream fileStream = new FileStream("listRandom.dat", FileMode.Create)) { listRandom.Serialize(fileStream); } listRandom.Clear(); using (FileStream fileStream = new FileStream("listRandom.dat", FileMode.Open)) { listRandom.Deserialize(fileStream); } Console.WriteLine("----------------------------"); foreach (ListNode item in listRandom) { Console.WriteLine(item.Data + " " + item.Random.Data); } } catch (Exception e) { Console.WriteLine("Ошибка: " + e.Message); Console.WriteLine("Объект: " + e.Source); Console.WriteLine("Метод, вызвавший исключение: " + e.TargetSite); Console.WriteLine("Стэк: " + e.StackTrace); Console.WriteLine("===================================="); } Console.ReadKey(); }